Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
.NET 3.x

Windows CE, OutOfMemoryException. Как бороться?

11.04.2017, 16:54. Показов 1280. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Проблема в следующем. Пишу программу под ТСД (Windows CE) на .NET CF 3.5 (Compact Framework). На данный момент программа разрослась и стало часто появлятся исключение OutOfMemoryException. Понятно что это из-за фрагментации памяти. Вопрос в следующем: Как эту память дефрагментировать или не допускать её фрагментации?
При ответе прошу учитывать, что используется фреймворк для мобильных устройств. Т.е., урезанная версия. В интернете уже много теории прочитал на эту тему, но конкретных решений данной проблемы так и не обнаружил.
Помогите, пожалуйста, хоть чем-то.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.04.2017, 16:54
Ответы с готовыми решениями:

Размеры Windows 7 и как с этим бороться
Доброго времени суток! Вот решил обновить свою семерку до 10-ки и столкнулся с проблемой емкости диска. Перед обновление я полностью...

Незаконченное обновление (восстановление) Windows - как бороться?
Доброго времени всем. Изгуглил весь яндекс, на форуме поискал, но все не то... Дело было так: Комп начал морозить не свое не наше....

Windows 7 Starter (ограничения и как с этим бороться)
Доброго времени суток. Не для ни кого не секрет, что сейчас на ноутбуки и нетбуки устанавливают windows 7 starter, которая имеет кучу...

8
 Аватар для MAXONline
3 / 3 / 0
Регистрация: 15.12.2014
Сообщений: 77
11.04.2017, 18:29
Ну тут скорее всего у тебя в настройках проекта стоит версия для 32 и 64 битной системы. И при работе программы не хватает памяти. Просто поставь только для 64 битной системы.
0
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
12.04.2017, 09:56  [ТС]
Цитата Сообщение от MAXONline Посмотреть сообщение
Просто поставь только для 64 битной системы
Цитата Сообщение от DMF Посмотреть сообщение
Windows CE
нет 64-битной версии. Это КПК...
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.04.2017, 10:21
Цитата Сообщение от DMF Посмотреть сообщение
Как эту память дефрагментировать или не допускать её фрагментации?
Ну а как можно ответить на этот вопрос, не видя кода, не имея результатов профайлера?
Общие рекомендации известны - реже создавать и уничтожать объекты, использовать пулы, использовать файловые кеши, может быть использовать сжатие в памяти. Также вместо массивов можно посмотреть на списки. Это уменьшит требования к непрерывности памяти. Более конкретного вам никто не скажет, без знания деталей.
0
2 / 2 / 0
Регистрация: 29.12.2013
Сообщений: 128
12.04.2017, 10:27
освобождайте неиспользуемые ресурсы, оптимизируйте код, а распределение памяти это более низкий уровень, система должна этим заниматься сама
0
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
12.04.2017, 11:24  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
Ну а как можно ответить на этот вопрос, не видя кода
Код на несколько мегабайт...
Цитата Сообщение от Storm23 Посмотреть сообщение
не имея результатов профайлера
А существует профайлер для КПК?
Цитата Сообщение от Storm23 Посмотреть сообщение
можно посмотреть на списки
Т.е., ArrayList?
Цитата Сообщение от Storm23 Посмотреть сообщение
использовать пулы
Это что и с чем его едят?
Цитата Сообщение от Storm23 Посмотреть сообщение
может быть использовать сжатие в памяти
А это как?

Добавлено через 5 минут
Цитата Сообщение от xinvestoriginal Посмотреть сообщение
оптимизируйте код
Как? Может какая литература или статьи есть на эту тему? В Нете всё что мне попадалось касалось разработки на ПК, т.е. с использованием профайлеров и прочих инструментов, непригодных для использования на КПК.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.04.2017, 11:25
Цитата Сообщение от DMF Посмотреть сообщение
А существует профайлер для КПК?
Не знаю. В любом случае нужно выяснить где происходят основные затраты памяти.
Цитата Сообщение от DMF Посмотреть сообщение
Именно тип object?
Любые объекты любого типа.
Цитата Сообщение от DMF Посмотреть сообщение
Т.е., ArrayList?
Т.е. LinkedList.
Цитата Сообщение от DMF Посмотреть сообщение
Это что и с чем его едят?
Это повторное использование объектов, вместо их пересоздания.
Цитата Сообщение от DMF Посмотреть сообщение
А это как?
А так - хранить массив в сжатом виде. Когда нужно - расжимать.

DMF, а вообще судя по вашим вопросам, проблема у вас скорее всего намного проще и банальнее.
0
7 / 7 / 3
Регистрация: 16.04.2015
Сообщений: 175
12.04.2017, 11:48  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
а вообще судя по вашим вопросам
Простите, я только в процесс познания C#. До того писал в С на низком уровне. Там проблем с памятью не было - сам её распределял...
Цитата Сообщение от Storm23 Посмотреть сообщение
хранить массив в сжатом виде
Что значит "в сжатом виде"? Программно или есть какой-то класс или метод для этого?
Цитата Сообщение от Storm23 Посмотреть сообщение
Это повторное использование объектов, вместо их пересоздания.
Я тоже думал об этом. Только вопрос - "Как?". Я так и не понял. Делать основные переменные глобальными, что-ли?..
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.04.2017, 12:33
Цитата Сообщение от DMF Посмотреть сообщение
Я тоже думал об этом. Только вопрос - "Как?". Я так и не понял. Делать основные переменные глобальными, что-ли?..
Именно в переменных не может храниться большое количество данных.
Я не могу ответить на этот вопрос, потому что понятия не имею о вашей структуре данных.

Цитата Сообщение от DMF Посмотреть сообщение
Что значит "в сжатом виде"? Программно или есть какой-то класс или метод для этого?
Для сжатия можно использовать например GZipStream (хотя есть и более экономные third-party библиотеки). Смысл в том, что данные делятся на отдельные части. Каждая часть должна удовлетворять двум условиям - она должна использоваться относительно редко и в ней должны быть однородные данные. Затем каждая такая часть данных заносится в массив и сжимается. В сжатом виде данные могут занимать раз в 10 меньше памяти. Когда данные становятся нужны - они расжимаются, модифицируются и снова сжимаются. Как вариант - эти сжатые части можно хранить в файлах, а не в ОЗУ.

Но повторяю, это - кардинальные меры. И такие методы работают только если архитектура заранее предусматривает такие вещи. Поэтому просто так взять и применить эти методы наврядли получится. Вам нужно выяснить где у вас идет большой расход памяти и сделать точечную оптимизацию именно этого фрагмента. Какую и как - зависит от того, что это за данные.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2017, 12:33
Помогаю со студенческими работами здесь

Занимаемая память приложения. System.OutOfMemoryException: "Выдано исключение типа "System.OutOfMemoryException"."
Спустя несколько часов работы приложения выдаёт вот такую ошибку: System.OutOfMemoryException: "Выдано исключение типа...

Ошибка System.OutOfMemoryException - как обойти?
Добрый день. На данный момент в коде в 2-х местах встречаются подобные исключения, т.е. как я понимаю не хватает оперативной памяти....

Как бороться с F5?
Всем привет. Есть форма, нажав на кнопочку, происходит занесение в БД инфы. При нажатии на F5 или значок "обновить" вылазит...

как бороться с мошенничеством ?
Добрый День ! Затерзали меня смутные сомнения и я решил проверить вручную ссылки, которые я купил на Линкфеде. И вот на что я наткнулся...

Как бороться с *.ldb?
На сервере стал получаться файл *.ldb Он не дает мне загружать на сервер изменения в БД Access. Исчезает после перегрузки сервера, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 11.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 10.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru