將我的.Net Compact Framework應用程序移動到Windows CE設備的SD卡時,程序執行速度較慢,然後從內部存儲器運行。爲什麼我的SD卡上運行的程序太慢?
我想,啓動可能會比較慢,但它是整個程序。存儲卡沒有IO。
爲什麼我的應用程序如此之慢以及緊湊型框架如何處理和加載程序集?
將我的.Net Compact Framework應用程序移動到Windows CE設備的SD卡時,程序執行速度較慢,然後從內部存儲器運行。爲什麼我的SD卡上運行的程序太慢?
我想,啓動可能會比較慢,但它是整個程序。存儲卡沒有IO。
爲什麼我的應用程序如此之慢以及緊湊型框架如何處理和加載程序集?
它與需求分頁有關。由於SD不是可執行介質,因此您的應用程序無法直接從SD卡運行,因此必須將其拉入RAM才能運行。 Windows CE通常不會有大量的RAM,因此加載程序不會將整個應用程序拖入RAM中運行。當然,你的堆和堆棧將在RAM中,但是程序集中的實際IL代碼將根據需要進行分頁。當系統決定不再需要特定頁面時,也會將其分頁。
這種分頁可以影響性能,儘管我有點驚訝它的影響很大,除非應用程序本身非常大(就像你有大量的嵌入式資源,它會退出程序集一樣)。
我同意ctacke之前的「demand-paging」答案。
解決方案你可能會嘗試的是從SD卡執行一個裝載程序,它將實際的可執行文件和DLL從卡複製到硬盤,然後從裝載程序執行程序。在隨後的執行中,加載程序可以檢測硬盤版本是否爲最新版本,如果是,則直接啓動。如果硬盤版本不是最新版本,加載器將再次從卡中複製過時的文件,然後執行實際的程序。
我之前從遠程網絡位置加載的程序完成此操作,並且它工作得很好。
如果應用程序在SD卡上,某些設備會使您的程序崩潰。它發生在暫停開機的設備上。
好的。我們希望使用SD卡,以便我們可以將其他資源和dll(也可能是pdb文件)部署到設備。目前由於內部存儲器的大小限制,這是不可能的。正如你所說,將所有東西放在SD卡上有意義嗎? – 2008-12-03 14:51:36
IIRC,CE設備的「主內存」無法就地執行,所以應用程序代碼仍然需要加載到內存中。 – crashmstr 2008-12-03 14:58:13