Проблемы с производительностью Pocket PC 2003 C # ... Должен ли я это делать? - PullRequest
2 голосов
/ 22 марта 2011

Среда

  • Windows XP SP3 x32
  • Visual Studio 2005 Standard Edition
  • Карманный ПК Honeywell Dolphin 9500 / платформа Windows Mobile 2003
  • .NET Framework 1.1 и .NET Compact Framework 1.0 SP3
  • Использование VC #

Проблема

Когда я сохраняю изображение со встроенной камеры и Honeywell SDK ImageControl на карту памяти устройства или во внутреннюю память, это занимает 6–7 секунд.

В настоящее время я сохраняю изображение в формате PNG, но также могу использовать BMP или JPG.

Соответствующие строки в коде : 144-184 и 222в частности, 162, 163 и 222.


Цель

Я бы хотел сократить это время до 2 или 3 секунд и, если возможно, еще меньше.

В качестве дополнительной цели я ищу набор профилирования для устройств Pocket PC 2003 , специально поддерживающий .NET Compact Framework версии 1.0 .В идеале бесплатный, но беспрепятственный краткий учебник тоже подойдет.


Вещи, которые я пробовал

  • Я изучил асинхронный ввод-вывод через System.Threading немного, но яу вас нет опыта, чтобы узнать, является ли это хорошей идеей, или как именно реализовать потоки для одной операции.
    • При реализации потоков, как это показано в приведенном ниже коде, кажется, чтотривиальное увеличение скорости, возможно, на секунду или меньше.Однако, что-то в следующей Форме требует изображения, возможно, в процессе сохранения, и я не знаю, как вообще смягчить ожидание или обработать этот сценарий.
  • РЕДАКТИРОВАТЬ: Изменение формата сохранения с PNG на BMP или JPG, с помощью потоков , кажется, значительно сокращает время сохранения. .

Код

http://friendpaste.com/3J1d5acHO3lTlDNTz7LQzB
Дайте мне знать, если код должен быть размещен здесь в тегах кода.Это немного длинно (~ 226 строк), поэтому я продолжил и добавил его в друзья, так как это было приемлемо в моем последнем посте.

Ответы [ 2 ]

3 голосов
/ 22 марта 2011

Сменив формат сохранения с PNG на BMP и включив код потоков, показанный в ссылке Код, я смог сократить время сохранения до ~ 1 секунды.

1 голос
/ 22 марта 2011

Для этого вам нужен Honeywell SDK, так как их управление фактически сохраняет изображение. Вызов этого в отдельном потоке (т.е. не в потоке пользовательского интерфейса) совсем не поможет (как вы выяснили), и на самом деле это усложнит вам задачу, так как вам нужно подождать, пока задача сохранения не будет завершено, прежде чем перейти к следующей форме.

Единственное, что я могу сделать, это убедиться, что вы сохраняете изображение во внутреннюю память (а не на SD-карту), поскольку запись на SD-карту обычно занимает значительно больше времени, чем запись в память. Или посмотрите, можете ли вы получить техническую поддержку от Honeywell - 6-7 секунд кажется слишком долгим для такой задачи.

Или посмотрите, позволит ли Honeywell SDK получить изображение в виде байтового массива (вместо сохранения на диск). Если этот вызов возвращается менее чем через 6-7 секунд, вы можете обработать его сохранение самостоятельно.

...