项目简介:
我是一个相对初级的程序员。我的应用程序是C#.net
使用VS2008
.net 3.5 编写的,它是一个相当大的程序(按照我的标准),大约有 200 个表单 + 30 个类和 50K 行代码。程序的一个部分从文本文件中导入数据,计算一堆东西,然后将结果写入 Access 数据库。
导入过程通常可以运行 20 分钟或更长时间,具体取决于文本文件中的行数。最终,程序崩溃了,我得到“错误创建窗口句柄错误 - 总是在我的代码中的不同位置。当它运行时,它似乎也在不断变慢。(可能是分页问题?)我的操作系统是带 SP3 的 XP , 32 bit, 3Gig RAM if that matter. 这个问题也发生在我的 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
这种情况一直持续到程序崩溃..
从网上寻找答案。我期待看到导致问题的句柄数量增加。看来问题是用户对象的数量正在耗尽我的内存,也许这最终导致了崩溃?崩溃发生时,内存使用量一般在450M到600M之间。
我尝试在数据处理过程中多次调用的类之一中添加一些 .Dispose() 代码,但这没有效果。(也许是因为我没有做对......)
- 越来越多的对象/内存使用量是否会导致问题?
- 如何找出正在增长的用户对象(类或表单?)?
- 一旦我找到它,我该如何修复它?
欢迎任何建议。