memory-leaks f# mailboxprocessor

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