我有一个爬虫应用程序(使用C#)从Web下载页面.应用程序需要更多的虚拟内存,即使我处理每个对象甚至使用GC.Collect() .
这个,有10个线程,每个线程都有一个下载页面的套接字.在每个线程中,我有一个byte[] buffer
存储页面内容,并有一个string str_content
我存储在其中,页面内容在字符串中.我有一个Sytem.Timer
每3秒钟的一次,如果每个线程都被停止,给它分配新线程并启动它.
我使用dispose方法甚至GC.Collect()
在我的应用程序中使用,但是在3小时内,我的应用程序在虚拟内存上占用500 MB(在Process explorer中的私有字节上为500 MB).然后我的系统将挂起,我应该重新启动我的电脑.
会不会很粗鲁,如果我指定我的byte[]
并且string
为空?
有什么方法可以用来释放虚拟内存吗?
谢谢 .
首先,你不应该打电话给gc.collect(),因为这是一个代价高昂的电话,而且不应该是必要的.
如果您看到增长并且您仍然在呼叫gc.collect()
您拥有仍然具有引用的资源,则无法收集它们.
我将开始查看您的代码并确保所有对象都在适当的范围内声明,您正在使用Using Statement语法来确保正确清理实现IDisposable的项目并对代码进行全面检查.
下一步是采用像ANTS探测器之类的工具,看一下实际存储在内存中的内容.