memory leaks - Fugas de memoria en Microsoft.FSharp.Control.Mailbox?
memory-leaks f# (2)
.NET tiene su propio recolector de basura, que funciona bastante bien. La forma más común de causar pérdidas de memoria en las tecnologías .NET es configurar delegados y no eliminarlos en los deconstructores de objetos.
Estoy buscando algunas fugas de memoria en un servicio de larga duración (usando F #) en este momento. La única cosa "extraña" que he visto hasta ahora es la siguiente:
- Utilizo un MailboxProcessor en un subsistema con un tipo de datos algebraico llamado QueueChannelCommands (más o menos un montón de comandos Agregar / Obtener, algunos con AsyncReplyChannels adjunto)
- cuando hago el perfil del servicio (usando Ants Memory Profiler) veo instancias de arreglos del tipo mencionado (la mayoría tiene longitud 4, pero está creciendo): todas están vacías (nulas) cuyas referencias parece estar en Control.Mailbox:
No puedo ver ninguna razón en mi código para este comportamiento (su código estándar se puede encontrar en todos los ejemplos de buzones, solo un ciclo con let! = receive
y una match
a seguir terminó con un return! loop()
¿Alguien ha visto este tipo de comportamiento antes o incluso sabe cómo manejar esto? ¿O es esto incluso un error (conocido)?
Actualización: el crecimiento de las matrices es realmente extraño: parece que se ha agregado espacio adicional sin que se utilice correctamente:
No soy un experto en F # de ninguna manera, pero quizás puedas ver la primera respuesta en este hilo:
¿Async.StartChild tiene una pérdida de memoria?
La primera respuesta menciona un tutorial para la creación de perfiles de memoria en la siguiente página:
Pero mencionan esta versión de código abierto de F #
Y no estoy seguro de que sea lo que está buscando (sobre esta versión de código abierto de F # en el último punto), pero tal vez pueda ayudarlo a encontrar la fuente de la fuga o probar que realmente está perdiendo memoria.
Espero que ayude de alguna manera tal vez?
Tony