我正在支持一个基于Windows Mobile6 .Net紧凑框架表单的应用程序。现在我们已经到达了一个点,应用程序中使用的数据量会导致内存不足错误。虽然应用程序的预期寿命有限,但我相信它将继续正常运行,直到开发出替代平台/应用程序为止。应用程序中使用的数据量并没有变小,因此一种选择是减少应用程序代码的大小。
前段时间,我偶然发现了一篇博客文章或文档,我记得其中指出了一种最小化应用程序代码占用内存的方法,那就是将所有源代码移动到单独的程序集中,并使用一个小的启动shell启动应用程序。在开始该方法的工作之前,我想确认这是正确的方法,并量化通过这样做可能实现的节省。
上述方法是否正确,如果正确,是否有支持它的文档?
发布于 2012-05-04 01:24:16
您所描述的将所有应用程序代码放入托管dll并创建一个非常小的可执行存根以启动的方法确实会减少进程所需的内存量。您将节省的内存量相当于与下一个64Kb边界对齐的可执行文件的大小。
有关更多信息,请参阅此博客条目:http://blogs.msdn.com/b/robtiffany/archive/2009/04/09/memmaker-for-the-net-compact-framework.aspx
该博客还链接到更详细的解释WinCE 5的内存管理系统,以及为什么可怕的“动态链接库崩溃”是一个如此大的问题。
但是,请注意,自Windows Mobile6.1引入以来,情况发生了一些变化。本机Dlls不再映射到与以前版本中相同的位置,从而使您的进程有更多的内存空间可供操作。你在问题中提到了Windows Mobile6,所以要注意,虽然这个建议的重构确实会给你更多的内存来处理,但它可能不会给你足够的内存(除非你的.exe很大)。
有关Windows Mobile 6.1中引入的内存管理更改的详细信息,请参阅此处:
http://bolingconsulting.com/2008/windows-mobile-6-1-memory-management-changes/
发布于 2012-05-03 20:51:06
我曾经遇到过这个“内存不足”的问题。我不得不创建一个特殊的类来保存我的数据,它包含的信息不像我的PC应用程序使用的类那么多。
除了我在使用MS-DOS时读到的内容外,我从未见过您参考的关于使用小型启动shell脚本的文档。
https://stackoverflow.com/questions/10423808
复制相似问题