Почему мои программы работают с моей SD-карты так медленно?

StackOverflow https://stackoverflow.com/questions/337313

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Я согласен с предыдущим "поиском страниц по требованию" ответ по ctacke.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top