2010-05-21 2 views
4

Мне было предложено приложение для Windows Mobile, написанное на .Net CF 3.5, и одна из проблем связана с хранением.Для завершения этой операции недостаточно памяти - памяти программы или памяти?

Сообщение «Недостаточно памяти для завершения этой операции» появилось несколько раз - оно регистрируется в базе данных SQL CE и всегда происходит во время доступа к данным (но не к одному и тому же биту доступа к данным).

Вещь, которую я немного смущаю, касается того, относится ли это к памяти программы (например, ОЗУ) или к Памяти памяти (постоянное хранилище). Казалось бы, это память памяти, но у устройств, похоже, много свободного. Хотя есть некоторые OutOfMemoryExceptions, они кажутся совершенно не связанными с этой проблемой (в том, что это происходит в другое время из-за проблемы с изображением).

Мы используем SQL CE 3.5 с одним соединением, которое сохраняется вместе с приложением на устройстве (в отличие от карты памяти). Это устройство Motorola MC75 под управлением Windows Mobile 6.1.

Любые мысли?

ответ

8

Это ошибка Windows на уровне низкого уровня, код 14, ERROR_OUTOFMEMORY. В сообщении об ошибке не упоминается «память», потому что это не всегда вызвано нехваткой памяти. Наиболее типичным триггером является программа, превышающая ее квоту ресурсов ядра. Как и 10 000 оконных ручек, есть много других. Это для настольной версии btw, я не сомневаюсь, что она намного ниже на Windows Mobile.

Ну, программа поросенок. Один из возможных способов вызвать эту ошибку - не вызывать Dispose() для объектов классов, которые реализуют IDisposable. Это потребует ресурсов ядра, которые не будут выпущены до тех пор, пока поток мусора и поток финализатора не будут запущены. Это может занять некоторое время. Классы SQL CE, безусловно, являются кандидатами. Если у вас нет подсказки, откуда происходит утечка ресурсов или чрезмерное использование, инвестируйте в профилировщик, который работает на CF.

+1

Спасибо, это полезно. Хотя это выглядит как ERROR_NOT_ENOUGH_MEMORY для сообщения «Недостаточно памяти для обработки этой команды». Сообщение «Недостаточно хранилища доступно для завершения этой операции» (которое я получаю) для кода 14, ERROR_OUTOFMEMORY, в соответствии со следующей страницей: http://msdn.microsoft.com/en-us/library/ ms681382 (VS.85) .aspx Хотя я не могу найти разницу между этими двумя кодами. Вы знаете, ваш ответ по-прежнему применяется к коду ошибки 14? Тем временем я проверю эти «использование» утверждений ... –

+0

Да, я так думаю. Получил неправильный, который выглядит как ошибка DDE. –

0

Сколько виртуальной памяти выделено? По возможности увеличивайте значение.

+0

Я не уверен, что знаю, что вы имеете в виду, относится ли это к настройкам памяти, которые упомянуты deltreme? –

+0

Виртуальная память не регулируется в любой версии CE. – ctacke

0

Я не знаю, относится ли это также к MC75, но на Start->Settings->Control Panel->System должна быть вкладка «Память», где вы можете настроить, сколько памяти доступно в качестве ОЗУ, и сколько зарезервировано для хранения файлов.

Это не относится к папке \ Постоянная память (или \ Карта памяти, так как она вызывается на нашем устройстве), но и в других папках, например \ Temp.

+1

Есть страница памяти, но вы не можете ее отрегулировать - из того, что я понимаю, это невозможно в WM6, поскольку две памяти логически (возможно, даже физически) разделены. И, не зная, в какой памяти проблема, я бы не знал, какой способ ее настроить! –

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