Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2015, 15:41   #1
pier
 
Регистрация: 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 пробовал - это для того, чтобы погасить область копирования (пунктирную), у меня ее нет.
pier вне форума Ответить с цитированием
Старый 17.09.2015, 16:28   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а проблема не в этой строке (точнее, возможно и в этой, но я не понимаю что ее здесь может вызвать)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.09.2015, 16:54   #3
pier
 
Регистрация: 05.06.2015
Сообщений: 6
По умолчанию

Да, получается, что проблема в этой строке, только криминального в ней ничего нет. Просто копирование и вставка на другой лист. Предварительно то, что копируется фильтруется с помощью автофильтра, то есть копируется часть большой таблицы.
При каждой вставке, если смотреть в диспетчер задач, то excel отъедает кусочек памяти и не возвращает ее, а накапливает.
Пробовал и просто написать
Range.Copy
Sheets("qwerty").Paste
Как только происходит paste в дебагере, сразу + память в диспетчере.
Вот и не понимаю, почему так.
pier вне форума Ответить с цитированием
Старый 17.09.2015, 23:00   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от pier Посмотреть сообщение
Перед каждой новой вставкой лист wsb очищается командой wsb.Cells.ClearContents
и вставляется новая порция данных, это может быть 50 строк, а затем 10, каждый раз разное количество.
Как ни странно, помогает удаление листа, на который происходит вставка значений, либо закрыть файл и открыть его снова.
Откуда берутся данные листа wsa? Возможно, в копируемых диапазонах есть невидимые объекты, которые не удаляются методом Cells.ClearContents. Это бывает при копировании-вставке из веб-браузера. Посмотрите после вставки wsb.shapes.count.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача-найти объем оперативной памяти по шестнадцатеричному адресу последнего байта оперативной памяти 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