所有
我目前有一部客户在运行我们的Windows移动应用程序时遇到各种问题的电话。此问题是手机在运行应用程序时最终会完全重置。我有内部进行一些测试,我没有经历过重置,但我注意到程序内存在运行表单时显着下降。在我们一直试图缩小的应用程序中,我们确实有轻微的内存泄漏,但没有达到这么大的程度。
最终应用程序刚刚退出程序内存,但似乎并非所有内存都被释放。程序存储器不会恢复到原来的状态。他们已经安装了一些第三方应用程序,例如VicSoft ClearTemp,但这些应用程序似乎只是删除临时文件以保持较低的存储内存。有问题的手机是Sprint 6800 Windows Mobile 6.0 profressional。该应用程序是在.NET 2.0 Compact Framework中编写的。
我们确实遇到了一个问题,即应用程序内存不足仍然是一个持续存在的问题,这似乎是随机发生的。这个问题似乎与记忆直接相关,但也许两者正在携手合作导致崩溃。
非常感谢任何想法或帮助。
答案 0 :(得分:3)
确保在完成表单后处理表单(调用Dispose()或在using()块中声明和使用它们),特别是如果它们包含位图和/或PictureBoxes。更一般地说,确保您处置可以处理的每种资源。
答案 1 :(得分:3)
应用结束的效果可能是由两件事中的一件引起的:
正如已经指出的那样,确保在所有与GDI相关的对象(位图,笔等)上调用Dispose。可以找到与位图相关的错误的说明here和here。
另一件需要注意的事情是,当Form本身是Components on a Form are not Disposed时(与Controls不同)。因此,如果您正在进行大量的表单创建和破坏,请密切关注它。
如果您可以将项目升级到目标3.5,即使它仅用于内部测试,运行CF 3.5 CLR Profiler肯定可以帮助您找到泄漏。
答案 2 :(得分:0)
如果您不断创建和销毁对象,请确保您的事件处理程序取消挂钩,否则垃圾收集器会认为这些对象仍在使用中,从而导致内存泄漏。
答案 3 :(得分:0)
Windows Mobile Memory Leak的绝佳解决方案 - cleanRAM(RAM Cleaner)。
获取更多信息并下载最新的cleanRAM版本:
答案 4 :(得分:0)
如果它的内存泄漏,那么结果程序会抓取越来越多的内存,直到它由于内存不足而最终崩溃。这意味着创建或分配动态内存但忘记释放内存。如果发生内存泄漏,则无法访问给定程序的内存。对于此特定解决方案,您还可以see this.