2008-12-03 3 views
4

При перемещении моего приложения. Compact Compact Framework на SD-карту устройства Windows CE программа выполняется медленнее, а затем запускает ее из внутренней памяти.Почему мои программы работают с моей SD-карты так медленно?

Я думал, что запуск может быть медленнее, но это целая программа. На карту памяти нет ввода-вывода.

Почему мое приложение так медленно и как компактная рама обрабатывает и загружает сборки?

ответ

11

Это связано с требованием пейджинга. Ваше приложение не может быть запущено непосредственно с SD-карты, так как SD не является исполняемым носителем, поэтому его нужно вытащить в RAM для запуска. Windows CE обычно не имеет большого количества ОЗУ, поэтому загрузчик не выводит все ваше приложение в ОЗУ для запуска. Конечно, ваши кучи и стеки будут в ОЗУ, но фактический IL-код в самой сборке вызывается по мере необходимости. Он также выгружается, когда система решает, что ему больше не нужна конкретная страница.

Этот пейджинг может повлиять на производительность, хотя я немного удивлен, что это большое влияние, если приложение действительно велико (например, если у вас много встроенных ресурсов, которые он вытаскивает из сборки).

+0

Хорошо. Мы хотим использовать SD-карту, чтобы мы могли развернуть на устройство дополнительные ресурсы и DLL (возможно, также pdb-файлы). На данный момент это невозможно из-за ограничений по размеру внутренней памяти. Как вы сказали, имеет смысл вкладывать все на SD-карту? – 2008-12-03 14:51:36

+0

IIRC, «основная память» устройства CE также не может выполняться на месте, поэтому код приложения все равно должен быть загружен в ram. – crashmstr 2008-12-03 14:58:13

1

Я согласен с предыдущим ответом на запрос по запросу ctacke.

Решение Вы можете попробовать выполнить программу-загрузчик с SD-карты, которая копирует ваши фактические исполняемые файлы и библиотеки DLL с карты на жесткий диск, а затем выполнит вашу программу с загрузчика. В последующих исполнениях загрузчик может определить, обновлена ​​ли версия жесткого диска, и если да, просто запустите ее напрямую. Если версия жесткого диска не обновлена, загрузчик снова скопирует устаревшие файлы с карты и затем выполнит фактическую программу.

Я сделал это раньше из программы, загруженной в удаленную сеть, и она работала очень хорошо.

0

Некоторые устройства будут разбивать вашу программу, если приложение находится на SD-карте. Это происходит, когда устройство приостановки питания включено.

Смежные вопросы