我是一个相对较低级的程序员。我的应用程序使用VS2008
并使用VS2008
编写,并以.net 3.5为目标。这是一个相当大的程序(按我的标准)大约200个表格+ 30个类别和50K行代码。程序的一部分从文本文件导入数据,计算一堆东西,并将结果写入Access数据库。
根据文本文件中的行数,导入过程通常可以运行20分钟或更长时间。最终,程序崩溃了,我得到了“错误创建窗口句柄错误 - 总是在我的代码中的不同位置。当它运行时,它似乎也不断变慢。”(我的操作系统是XP w/SP3 ,32位,3Gig RAM,如果有问题的话,我的W7 64位机器上配备4Gig RAM也会发生这种问题
我已经阅读了错误,并且已经使用任务管理器完成了一些侦测工作,遇到内存泄漏。下面是一些我收集到的数据。
startup - memory usage = 48M/Handles = 428/Threads = 17/User Objects = 111
1 minute memory usage = 65M/Handles = 520/Threads = 22/User Objects = 523
2 minutes memory usage = 81M/Handles = 520/Threads = 19/User Objects = 952
3 minutes memory sage = 98M/Handles = 510/Threads = 19/User Objects = 1359
4 minutes memory usage = 113M/Handles = 510/Threads = 18/User Objects = 1766
这样继续下去,直到程序崩溃..
˚F rom寻找网络上的答案。我期待看到越来越多的句柄引起这个问题。看来问题是用户对象的数量正在消耗我的内存,也许这最终导致崩溃?发生崩溃时,内存使用量通常在450M到600M之间。
我已经尝试在数据处理过程中多次调用的其中一个类中添加一些.Dispose()代码,但这没有任何效果。 (也许是因为我没有做正确的......)
- 是否越来越多的对象/内存使用情况导致该问题?
- 如何找出User Object(类或表单?)正在增长的内容?
- 一旦我找到它,我该如何解决它?
任何建议将受到欢迎。
抓住这个 - http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/ – 2013-03-27 14:31:24