Un mio collega è convinto che ci sia una perdita di memoria nell'implementazione di odod.net ado.net di Oracle. Ha scritto un programma di test per testare questa teoria e sta facendo quanto segue dopo aver chiamato smaltire su ogni oggetto al fine di determinare la quantità di memoria viene liberata:GC.Collect() e PerformanceCounter
PerformanceCounter p = new PerformanceCounter("Memory", "Available Bytes");
GC.Collect();
GC.WaitForPendingFinalizers();
float mem = p.NextValue();
Il valore delle prestazioni risultante viene poi confrontato con un valore recuperato prima di smaltire l'oggetto. Ciò produrrà risultati accurati?
No, non è così che funziona il gestore della memoria. Dopo aver passato il problema dell'allocazione dello spazio di memoria virtuale, rimette i blocchi rilasciati nuovamente nella lista dei blocchi liberi, pronti per essere riutilizzati più tardi. –
Hai provato a utilizzare ProcessExplorer per monitorare l'utilizzo della memoria e della memoria di sistema di .NET all'interno del processo? Non hai specificato quale tipo di memoria perde ... – GregC
Non sappiamo quale tipo di memoria perde, questo è parte del motivo del test, per confermare che c'è un problema. La mia domanda è di confermare se il test è valido. – zaq