【发布时间】:2012-05-11 11:21:23
【问题描述】:
我的一位同事确信在 Oracle 的 odp.net ado.net 实现中存在内存泄漏。他编写了一个测试程序来测试这个理论,并在对每个对象调用 dispose 后执行以下操作以确定释放了多少内存:
PerformanceCounter p = new PerformanceCounter("Memory", "Available Bytes");
GC.Collect();
GC.WaitForPendingFinalizers();
float mem = p.NextValue();
然后将得到的性能值与在处理对象之前检索到的值进行比较。这会产生准确的结果吗?
【问题讨论】:
-
您是否尝试过使用 ProcessExplorer 来监控您的进程中的 .NET 内存和系统内存使用情况?您还没有说明泄漏的是哪种类型的内存...
-
不,内存管理器不是这样工作的。在完成分配虚拟内存空间的麻烦后,它会将释放的块放回空闲块列表中,以备以后再次使用。
-
我们不知道是什么类型的内存泄漏,这是测试的一部分原因,以确认有问题。我的问题是确认测试是否有效。
-
为什么要使用 dispose() 方法?
标签: c# .net memory-leaks odp.net performancecounter