将我的 .Net Compact Framework 应用程序移动到 Windows CE 设备的 SD 卡时,该程序的执行速度比从内部存储器运行它要慢。
我想,启动可能会慢一些,但它是整个程序。存储卡没有 IO。
为什么我的应用程序这么慢,紧凑的框架如何处理和加载程序集?
将我的 .Net Compact Framework 应用程序移动到 Windows CE 设备的 SD 卡时,该程序的执行速度比从内部存储器运行它要慢。
我想,启动可能会慢一些,但它是整个程序。存储卡没有 IO。
为什么我的应用程序这么慢,紧凑的框架如何处理和加载程序集?
它与请求分页有关。您的应用程序不能直接从 SD 卡运行,因为 SD 不是可执行媒体,因此必须将其拉入 RAM 才能运行。Windows CE 通常没有大量的 RAM,因此加载程序不会将您的整个应用程序拉入 RAM 中运行。当然,您的堆和堆栈将在 RAM 中,但程序集本身中的实际 IL 代码会根据需要进行分页。当系统决定不再需要特定页面时,它也会被调出。
这种分页可能会对性能产生影响,尽管我有点惊讶它会产生很大的影响,除非应用程序本身非常大(例如,如果您有很多嵌入式资源,它会从程序集中提取出来)。
我同意 ctacke 之前的“按需寻呼”回答。
您可能会尝试的一个解决方案是从 SD 卡执行加载程序,将您的实际可执行文件和 DLL 从卡复制到硬盘,然后从加载程序执行您的程序。在随后的执行中,加载程序可以检测硬盘版本是否是最新的,如果是,则直接启动它。如果硬盘版本不是最新的,加载器将再次从卡中复制过期文件,然后执行实际程序。
我之前已经从远程网络位置加载的程序中完成了此操作,并且效果很好。
如果应用程序在 sd 卡上,某些设备会使您的程序崩溃。它发生在挂起开机设备时。