2008-12-03 47 views
4

将我的.Net Compact Framework应用程序移动到Windows CE设备的SD卡时,程序执行速度较慢,然后从内部存储器运行。为什么我的SD卡上运行的程序太慢?

我想,启动可能会比较慢,但它是整个程序。存储卡没有IO。

为什么我的应用程序如此之慢以及紧凑型框架如何处理和加载程序集?

回答

11

它与需求分页有关。由于SD不是可执行介质,因此您的应用程序无法直接从SD卡运行,因此必须将其拉入RAM才能运行。 Windows CE通常不会有大量的RAM,因此加载程序不会将整个应用程序拖入RAM中运行。当然,你的堆和堆栈将在RAM中,但是程序集中的实际IL代码将根据需要进行分页。当系统决定不再需要特定页面时,也会将其分页。

这种分页可以影响性能,尽管我有点惊讶它的影响很大,除非应用程序本身非常大(就像你有大量的嵌入式资源,它会退出程序集一样)。

+0

好的。我们希望使用SD卡,以便我们可以将其他资源和dll(也可能是pdb文件)部署到设备。目前由于内部存储器的大小限制,这是不可能的。正如你所说,将所有东西放在SD卡上有意义吗? – 2008-12-03 14:51:36

+0

IIRC,CE设备的“主内存”无法就地执行,所以应用程序代码仍然需要加载到内存中。 – crashmstr 2008-12-03 14:58:13

1

我同意ctacke之前的“demand-paging”答案。

解决方案你可能会尝试的是从SD卡执行一个装载程序,它将实际的可执行文件和DLL从卡复制到硬盘,然后从装载程序执行程序。在随后的执行中,加载程序可以检测硬盘版本是否为最新版本,如果是,则直接启动。如果硬盘版本不是最新版本,加载器将再次从卡中复制过时的文件,然后执行实际的程序。

我之前从远程网络位置加载的程序完成此操作,并且它工作得很好。

0

如果应用程序在SD卡上,某些设备会使您的程序崩溃。它发生在暂停开机的设备上。

相关问题