Mik*_*yev 1 c# dispose out-of-memory
我有一个巨大的日志文件,其中有大约1500万行.我必须将所有这些行移植到Oracle数据库.这就是我要做的事情:
导入完成后,我说:
bulkCopier.Dispose();
dataTable.Dispose();
然而,这对任何方式都无济于事.在任务管理器中,我看到内存使用量不断增长,直到内存不足为止.现在我的问题是没有Dispose()方法立即释放内存?如果是,那么为什么内存使用会累积,好像所有DataTable和OracleBulkCopy对象都保留内存一样.
Dispose不会立即释放托管内存.当您调用dispose时,Dispose将释放任何锁定到非托管资源(例如内存),并且与托管内存无关.
您的数据表全部填充了托管内存中的托管对象.打电话.对它进行处理不会做太多事情.您需要清除DataTable中的所有数据(有一个方便的Clear方法),这将允许垃圾收集器在将来的某个时间点释放内存,当它感觉像是在清理时.
使用分析器,您可以看到程序中所有内存的保存位置.很可能有许多其他托管对象要保留在引用中,这会阻止它们被垃圾回收.这与此无关Dispose.
| 归档时间: |
|
| 查看次数: |
2331 次 |
| 最近记录: |