我正在寻找大约 1 1/2 天的解决方案,但无法直截了当。我试图在PocketPC 2003 中从我们的C# 应用程序中启动一个*.lnk 文件。此 *.lnk 文件包含指向 evm.exe 的链接,该链接是 PocketPC 的 JVM。传递的参数是(除其他外)-Xms8M,它告诉 JVM 保留至少 8MB 的内存。
如果直接从 Windows Explorer 启动没有问题。
现在我在 C# 中创建了一个指向 *.lnk 文件的进程。当我尝试启动它时,JVM 控制台打开并显示以下两个错误之一:“EVM 执行历史记录太大”或“无法初始化堆(阶段 1)”(或类似的东西)。
如果我删除提到的参数,应用程序就没有问题。
由于这种行为,我假设分配给新创建的进程的内存太少。这是现实的吗?如果:有没有办法为新创建的进程分配更多内存?还是我完全错了,必须采取其他方式(如果有的话)?
编辑:
--CodeSnippet
this.myStartProcess = new Process { StartInfo = { FileName = appName },EnableRaisingEvents = true };
this.myStartProcess.Start()
----CodeSnippet--
编辑 2:
经过更多研究后发现,真正的问题是可用的资源非常有限,随着时间的推移被我的启动器应用程序(启动后总共大约 1.8 MB)吃掉了。
为了改进,我开始研究垃圾收集器在 Windows Mobile 中的工作原理,因此使用了两种技术来启动虚拟机。第一个是通过将其发送到后台(表单的方法)并等待垃圾收集器完成( )
来减少我自己的应用程序占用的内存。
之后,我在尝试启动 VM 之前在程序内存中寻找 9 MB 的可用空间。如果没有足够的空间,我会尝试将所需的内存从存储内存转移到程序内存。SendToBack()
GC.WaitForPendingFinalizers()
这两种技术改善了很多!
我的启动器应用程序仍然存在问题。当我的启动器应用程序在前面时,分配的字节(具体的字符串和装箱对象)会随着时间的推移而增加......在 10 分钟内大约有 30 kb。24 小时后,设备将自动重启。目前我假设发射器在此期间总共会在前面大约 10 分钟。尽管如此,内存泄漏并不是一件好事。有人知道如何追捕吗?
提前致谢
最好的问候
马塞尔