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