Estoy buscando algunas fugas de memoria en un servicio de larga ejecución (usando F #) en este momento. La única cosa "extraña" que he visto hasta ahora es la siguiente:pérdidas de memoria en Microsoft.FSharp.Control.Mailbox?
- Puedo usar un MailboxProcessor en un subsistema con un QueueChannelCommands algebraica-tipo de datos con nombre (más o menos un montón de Agregar/get.commands - algunos con AsyncReplyChannels conectado)
- cuando perfilo el servicio (usando Ants Memory Profiler) Veo instancias de matrices del tipo mencionado (la mayoría tiene una longitud 4, pero cada vez mayor) - todas vacías (nulas) cuyas referencias parecen estar en Control. Buzón:
No puedo ver ningún archivo en mi código de este comportamiento (su código estándar se pueden encontrar en todos los buzones-ejemplo que hay - sólo un bucle con un let! = receive
y una match
Para 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 cultivo de las matrices es muy extraño - parece que no hay espacio adicional anexa sin beeing se utiliza correctamente:
la matriz parece ser el "mailbox.arrivals" internos de la MailboxProcessor si esto es de ninguna ayuda – Carsten
Dave Thomas notó un comportamiento similar cuando se utiliza 'volver! loop() 'en el lado de un bloque try/catch: http://moiraesoftware.com/blog/2011/12/11/fixing-ahole/. No creo que sea el caso con tu programa. – pad
sí, gracias, soy consciente de este problema, pero esto dio como resultado mucho más sobrecarga (encontró muchas cosas Async), ¡similar a cuando lo hace! en lugar de regresar se usa - aquí solo veo crecientes y vacías matrices sin problemas de asincronización. – Carsten