在使用紧凑框架进行开发时,找到所有内存的最佳方法是什么?

6
我使用了CF 远程性能监视器,但它似乎只跟踪在托管世界中初始化的内存,而不是非托管世界中的内存。我只能假设如此,因为分析器中列出的数字远远低于允许的最大值(CE 5上为32mb)。使用RPM对特定应用程序进行分析后,我发现所有缓存的总使用量仅达到约12mb,然后慢慢缩小,因为(我认为)某些未经管理的内容开始占用更多内存。 系统中的内存滑块也显示设备的内存非常短缺。如果我杀死该进程,则滑块显示所有内存都回来了。所以这个托管进程必须(?)正在占用内存。
有没有简单一点的方法可以跟踪非托管内存使用情况,以某种方式使我能够将其与相应的P/Invoke调用匹配起来?
编辑:对于所有重新标记问题的人,它不是.NET,像这样标记问题会让事情变得混乱。它是.NETCF / Compact Framework。我知道它们看起来很相似,但它们是不同的,因为.NET很棒,而CF基本上只是一个NotImplementedException包装器。

1
“.NET 真是太棒了,而 CF 基本上只是一个围绕着 NotImplementedException 的包装器。”我喜欢这句话! - Stormenet
3个回答

3

我知道这篇文章有些过时了,但希望你能看到并回复。第二个链接指向http://msdn.microsoft.com/en-us/vstudio/aa496123,这似乎是Visual Studio的顶级站点。你还记得你当时链接的是什么吗? - Miserable Variable

1

好的,我在CE上使用C++而不是C#,所以这可能没有什么帮助,但是...

我使用一个名为 Entrk toolbox的软件包来监控Windows CE下的内存和资源使用情况、泄漏和异常。该工具包几乎就像是一个轻量级的CE版boundschecker。它在大多数时候都能解决问题。


1

我一直在使用C#托管应用程序中与未托管的问题作斗争,这并不容易。

我发现最有帮助的方法是定期将输出记录到文本日志文件中。例如,您可以每隔几分钟打印GlobalMemoryStatus的输出,并记录每次加载新表单的时间。从那里,您至少可以看到内存是否逐渐消失,或者某些特定时间消失了大块内存。

对我们来说,我们发现设备被使用时整天都会有逐渐减少的内存。然后,我们最终发现条码扫描设备在我们的Form基类中无缘无故地被初始化(我责怪之前的开发人员!:-)

设置此记录可能有点麻烦,但对我们来说,长远来看,它收益巨大,尤其是在设备处于实际使用状态时,我们可以获得实际数据、仪器、异常堆栈跟踪等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接