Недостаточно памяти для выполнения этой операции - память программы или память? - PullRequest
4 голосов
/ 21 мая 2010

Мне предложили исправить приложение для Windows Mobile, написанное на .Net CF 3.5, и одна из проблем связана с хранилищем.

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

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

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

Есть мысли?

Ответы [ 3 ]

8 голосов
/ 21 мая 2010

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

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

0 голосов
/ 21 мая 2010

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

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

0 голосов
/ 21 мая 2010

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

...