C# .Net Compact Framework控制台应用程序-由于OutOfMemory而静默终止
在无头WindowsCE6.0R3设备上,我正在运行基于.NETCF3.5的控制台应用程序。这个控制台应用程序由许多DLL组成,都是托管代码。此外,它并没有任何数据库功能,当然也并没有Windows窗体控件。 经过大约12小时到48小时的随机持续时间后,此应用程序停止运行,看起来好像被CF运行时悄悄终止了。调查结果如下:C# .Net Compact Framework控制台应用程序-由于OutOfMemory而静默终止,c#,garbage-collection,compact-framework,windows-ce,C#,Garbage Collection,Compact Framework,Windows Ce,在无头WindowsCE6.0R3设备上,我正在运行基于.NETCF3.5的控制台应用程序。这个控制台应用程序由许多DLL组成,都是托管代码。此外,它并没有任何数据库功能,当然也并没有Windows窗体控件。 经过大约12小时到48小时的随机持续时间后,此应用程序停止运行,看起来好像被CF运行时悄悄终止了。调查结果如下: 通过VS2008进行的远程调试不会显示任何运行时异常。即使在“调试->异常”菜单中,“公共语言运行时异常”->“系统”已启用“抛出” 应用程序终止后,.Net CF远程性能监视
你可能有内存泄漏。您应该周期性地将内存使用情况记录到一个文件中,其中包含您发出内存日志的代码位置的一些详细信息。如果应用程序在WM_HIBERNATE上没有反应,Windows CE将终止应用程序。WM_HIBERNATE是在程序内存不足时发送的。您还可以使用perfmon监控您的应用程序(请参阅中的详细信息),谢谢@josef。我们已经使用了.Net CF RPM(perfmon)工具,正如我在上面的问题中所附的快照所示,“GC后使用的托管字节”几乎保持不变(数百字节向上和向下)。WM_HIBERNATE是一个很好的指针。当我看到WM#U HIBERNATE/WM#U CLOSE消息是WindowsCE.Forms.MobileDevice的一部分时,如何在C#console应用程序中捕获WM#U HIBERNATE/WM#U CLOSE消息?WM#U HIBERNATE仅发送给Windows消息处理程序。由于perfmon不会显示所有内存,因此您可以使用内存记录器记录一段时间内所有进程的内存使用情况。在这里,托管字节的使用似乎还不够。