|
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 3
|
|
Изменение объёма памяти при OutOfMemoryException13.02.2016, 17:33. Показов 1914. Ответов 6
Метки нет (Все метки)
Приветствую всех.
Проблема такова: я сделал add-in для MS Word, который в некоторых случаях очень требователен к памяти. Соответственно, часто возникает OutOfMemoryException. Я пытаюсь с ним бороться частой принудительной сборкой мусора (GC.Collect), но не очень преуспел. Также логирую объём свободной оперативки - и отмечаю, что она есть в наличии даже при возникновении OutOfMemoryException. Так что мне кажется, что проблемы скорее в том, что просто превышается максимальный размер памяти, допустимый для процесса. Начал копать в эту сторону. Наткнулся на кучу свойств у Process: WorkingSet64, PeakWorkingSet64, MaxWorkingSet и иже с ними. И что-то не могу в них разобраться. Итак, как я понял из описания, WorkingSet64 должен возвращать текущий объём памяти в байтах, а MaxWorkingSet - задавать максимальный допустимый объём памяти (причём MaxWorkingSet имеет тип IntPtr...). Ну ладно, я создал тестовое приложение и смотрю на значения этих свойств для Process.GetCurrentProcess() (возвращённые значения делю на 1024, приводя к килобайтам):
И если будут иные советы по разрешению ситуации, буду благодарен. Если это важно, пишу под Framework 4.0 (чтобы была поддержка WinXP), ОС сейчас Windows 7 и 64-х битная машина, хотя OutOfMemory возникает в-основном на 32-битных компьютерах с Windows XP.
0
|
|
| 13.02.2016, 17:33 | |
|
Ответы с готовыми решениями:
6
Уменьшение используемого объёма памяти при работе с изображениями Найти изменение энтропии при расширении 8 г кислорода от объема V1=10л при t1=80 до объема V2=40л Изменение объёма памяти |
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
| 13.02.2016, 21:42 | |
|
вычищай свой говнокод и всё пройдет, гугли что такое IDisposable, зачем нужны Close и т.п
а эти глупости забудь смело, как и о существовании GC.Collect Добавлено через 50 секунд алгоритмы распределения памяти в ОС умней большинства программистов сталкивающихся с OutOfMemory
2
|
|
|
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 3
|
|
| 14.02.2016, 08:10 [ТС] | |
|
m0nax, Вы ещё про using и finally расскажите.
Хотя будет интересно услышать предложение, что мне сделать IDisposable, если в коде используются только списки, массивы, словари и COM-объекты Ворда. Может, дотнетовские библиотеки переписать?
0
|
|
|
TheGreatCornholio
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
|
||||
| 14.02.2016, 10:26 | ||||
|
Такая же ситуация с Excel - нужно каждый объект релизить, и желательно(а мб и необходимо) в правильной последовательности. http://stackoverflow.com/quest... op-objects
1
|
||||
|
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 3
|
|
| 14.02.2016, 10:55 [ТС] | |
|
Woldemar89, спасибо!
Насчёт ReleaseComObject идея правильная, хотя не уверен, что это освободит сильно много памяти (всё же основную часть списки и массивы жрут). Что касается обнуления ссылок, то я всегда стараюсь вызвать .Clear для словарей и списков после использования, если Вы имели это в виду. Насчёт = null для массива посмотрю, но массивы вроде только в самом конце процесса используются. Всё же хочется узнать, как лучше увеличить объём доступной памяти (дело в том, что чем больше её доступно - тем с более здоровыми документами можно работать). Насколько я разобрался, MaxWorkingSet вызывать без толку, как и функции WinAPI - это только рекомендации. Поскольку Word - 32-х битный, то и add-in вызывается в 32-х битной среде и значит, ограничен 2 Гб адресного пространства. Немного не ясно, почему же тогда столько процесс в памяти не занимает, но скорее всего, тут используется какая-то виртуализация. Понятно, что лучший способ - вынести часть кода в другой процесс. Но нельзя ли решить задачу как-то проще - через вызова кода в другом AppDomain, например?
0
|
|
|
TheGreatCornholio
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
|
|
| 14.02.2016, 11:01 | |
|
pokibor, мне кажется, вы не туда копаете, подход неправильный.
Приведите пример, объясните как идет обработка. Что на входе, что на выходе. Для справки: docx и xlsx - переименуйте в zip. Откройте, и структуру посмотрите. Это обычные zip архивы. Возможно, можно просто распаковать, да работать с xml? Или типа того... Короче мне лень дальше ванговать - рассказывайте процесс подробно от и до на небольшом примере.
1
|
|
|
14127 / 9347 / 1350
Регистрация: 21.01.2016
Сообщений: 35,125
|
||
| 14.02.2016, 16:21 | ||
|
Я это к чему. Очень многое зависит от вашего кода и, как заметил Woldemar89, не зная что и как он делает, гадать о причинах можно долго. Но хочу заметить, что COM-объекты ворда очень толстозадые (как-никак работают с DOM документов). Поэтому старайтесь релизить эти объекты как можно раньше. И IDisposable - это вам намёк на то, что время жизни многих объектов вашей программы можно (и нужно, раз такое дело) принудительно ограничить, что снизит затраты памяти...
1
|
||
| 14.02.2016, 16:21 | |
|
Помогаю со студенческими работами здесь
7
Изменение объема жесткого диска после Акроника при восстановлении Исключение OutOfMemoryException на машине с 16 GB оперативной памяти Как бороться с увеличением объема потребляемой оперативной памяти при сохранении файла Excel без закрытия?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|