Un colega mío está convencido de que hay una pérdida de memoria en la implementación de Oracle odp.net ado.net. Ha escrito un programa de prueba para probar esta teoría y está haciendo lo siguiente después de llamar a disponer en cada objeto con el fin de determinar la cantidad de memoria que se está liberado:GC.Collect() y PerformanceCounter
PerformanceCounter p = new PerformanceCounter("Memory", "Available Bytes");
GC.Collect();
GC.WaitForPendingFinalizers();
float mem = p.NextValue();
El valor de rendimiento resultante se compara entonces con un valor recuperado antes de deshacerse del objeto. ¿Esto producirá resultados precisos?
No, así funciona el administrador de memoria. Después de que se haya tomado la molestia de asignar espacio de memoria virtual, vuelve a colocar los bloques liberados en la lista de bloques libres, listos para volver a usarlos más tarde. –
¿Ha intentado utilizar ProcessExplorer para controlar la memoria .NET y el uso de la memoria del sistema dentro de su proceso? No ha indicado qué tipo de memoria se está escapando ... – GregC
No sabemos qué tipo de memoria está goteando, esa es parte del motivo de la prueba, para confirmar que hay un problema. Mi pregunta es para confirmar si la prueba es válida. – zaq