|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.09.2015, 15:41 | #1 |
Регистрация: 05.06.2015
Сообщений: 6
|
Отъедание оперативной памяти после каждой вставки диапазона
Добрый день.
Столкнулся с проблемой отъедания excel-ем оперативной памяти после каждого выполнения кода типа wsa.Range(wsa.Cells(1, StartCol), wsa.Cells(1, EndCol).End(xlDown)).Copy wsb.Cells(1, 1) От памяти отъедается примерно по 1 Мб каждый раз за 1 проход в цикле. В буфере обмена при этом сохраняется то, что копируется в данный момент. Очистить буфер не получается, память в итоге заканчивается. Перед каждой новой вставкой лист wsb очищается командой wsb.Cells.ClearContents и вставляется новая порция данных, это может быть 50 строк, а затем 10, каждый раз разное количество. Как ни странно, помогает удаление листа, на который происходит вставка значений, либо закрыть файл и открыть его снова. Перемещение по ячейкам листа wsb сильно замедляется после того как excel отъедает уже метров 300. Такое впечатление, что он копит где-то внутри себя все, что я вставлял на этот лист и как-то к этому листу привязывает, раз помогает только его удаление. Помогите советом, как буфер почистить? Или память освободить. Application.CutCopyMode = False пробовал - это для того, чтобы погасить область копирования (пунктирную), у меня ее нет. |
17.09.2015, 16:28 | #2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
а проблема не в этой строке (точнее, возможно и в этой, но я не понимаю что ее здесь может вызвать)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
17.09.2015, 16:54 | #3 |
Регистрация: 05.06.2015
Сообщений: 6
|
Да, получается, что проблема в этой строке, только криминального в ней ничего нет. Просто копирование и вставка на другой лист. Предварительно то, что копируется фильтруется с помощью автофильтра, то есть копируется часть большой таблицы.
При каждой вставке, если смотреть в диспетчер задач, то excel отъедает кусочек памяти и не возвращает ее, а накапливает. Пробовал и просто написать Range.Copy Sheets("qwerty").Paste Как только происходит paste в дебагере, сразу + память в диспетчере. Вот и не понимаю, почему так. |
17.09.2015, 23:00 | #4 | |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
Цитата:
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача-найти объем оперативной памяти по шестнадцатеричному адресу последнего байта оперативной памяти | Ksana Alex | Помощь студентам | 4 | 14.11.2013 15:51 |
Считывание из оперативной памяти | niki2012 | Общие вопросы Delphi | 7 | 05.01.2011 18:32 |
Объём оперативной памяти | _-Re@l-_ | Общие вопросы Delphi | 2 | 16.06.2010 12:58 |
Текстирование оперативной памяти | arxipmen | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 23.11.2007 14:30 |
Кол-во оперативной памяти | Квэнди | Win Api | 2 | 25.07.2007 13:27 |