当DOM处理大小为2MB的xml文件时,我的.NET CF 3.5应用程序收到内存不足异常。现在我明白这应该改为SAX处理,但我想知道为什么会收到这个错误。
来自http://blogs.msdn.com/b/mikezintel/archive/2004/12/08/278153.aspx, “Windows CE创建了一个额外的虚拟地址空间,大小为1G,用于大型分配。” “32MB应用程序虚拟地址空间可能会受到大型应用程序的巨大压力,如果它变得足够碎片,即使有空闲的物理内存也可能导致OOM错误。”
这是否意味着如果我的应用程序的堆大小(包括DOM)占用的内存超过32 MB,则应用程序将崩溃,但是然后它不能使用更多的1GB虚拟地址空间进行此分配? / p>
答案 0 :(得分:0)
根据我的记忆,所有普通数据(和相关对象)都存在于应用程序的32Mb虚拟地址空间中 - 要使用1Gb附加地址空间,您必须查看内存映射。当然,在您的情况下,替代方案将是基于流的处理。
答案 1 :(得分:0)
我们发现这对于CF内存问题是一个非常有用的解释(和解决方案!)。我们在使用Intermec实用程序时遇到问题的应用程序上成功使用此方法(我们有P / Invoke问题 - 我们的应用程序的VM空间已被充分利用,因此P / Invoke dll无法加载。)< / p>
http://robtiffany.com/mobile-development/memmaker-for-the-net-compact-framework