Страницы: 1
RSS
[ Закрыто ] Переполнение памяти в оперативке под ексель
 
Здравствуйте,

Приходится обробатывать порядка 2000 файлов под 5-8 млн строк, макрос их обробатывает все классно ... было бы, но на 3-4 файле Ексель в оперативной памяти занимает 1,5 гигабайта и вся работа макроса да и всего компьютера зависает.

Вопрос: Как можно обнулить данные, которые занимает Ексель в оперативке ?
 
Наверное, для начала показать код (может и обрабатываемый файл), чтобы понять, где и что можно очистить.
 
Код большой и замудренный :) В коде очищать все таки ничего не нужно.

Файл обычный тектовый в три столбца и с вреднем 5 млн.строк.

Дело не в коде, и ни как на нем не завязано, вот простой смысл проблемы - откроейте ексель и в ячейке А1 напишите ну к примеру "999999" протяните его в строну ну ячеек на 30 и вниз ячеек на 200 тыщ вниз и посмотрите сколько будет занимать Ексель в оперативке, а теперь все эти заполеннные ячейки удалите и посмтрите сколько будет занимать ексель в оперативке - почти столько же!

В этом и вопрос
Изменено: Opti1 - 13.06.2016 13:44:58
 
Цитата
Opti1 написал: а теперь все эти заполеннные ячейки удалите
Код
Activesheet.usedrange


Цитата
Opti1 написал: и посмтрите сколько будет занимать ексель в оперативке
Изменено: RAN - 13.06.2016 16:45:49
 
Какой размер файла подкачки?
Какая цифра стоит в файле C:\Windows\System32\Config.nt в параметре Files=
 
Цитата
RAN написал: Activesheet.usedrange
ООочень не значительно очищает память, в итоге все равно накапливается.
 
Цитата
Kuzmich написал: Какой размер файла подкачки?
Это не поможет - размер памяти в 1,5 Гб накапливается всего после 3 файлов, а у меня файлов более тысячи.
Изменено: Opti1 - 13.06.2016 16:46:24
 
Цитата
Opti1 написал: и посмтрите сколько будет занимать ексель в оперативке - почти столько же!
дело в том, что после удаления надо файл еще сохранить, а еще лучше закрыть. Тогда можно получить более реальные цифры по памяти. А пока не сохранили - за этим листом как бы зарезервирована память, если вдруг захочется Ctrl+Z нажать.
Цитата
Opti1 написал: Дело не в коде, и ни как на нем не завязано
если бы это было так - то и проблемы бы не было. А раз проблема есть - значит она в любом случае в коде. Другой вопрос, что возможно код никак не изменить, чтобы работал.
Из опыта: раз речь про текстовые файлы - стандартный Notepad(Блокнот) очень плохо работает с большими объемами в текстовых файлах. И если для считывания и записи используется стандартный метод а-ля "Input As #" - то это вполне может вызвать зависания. В то же время FSO может вполне корректно дозаписать данные в файл или считать построчно данные даже из больших файлов.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:  раз проблема есть - значит она в любом случае в коде
Я же выше привел пример, что эта проблема ни коем образом не касается кода и является общей без какой либо привязке к работе макроса.
 
А ну тогда простите, устраняюсь. Если Вас не интересуют другие мнения по проблеме, кроме Вашего - не вижу смысла о чем-то с Вами рассуждения вести.
Цитата
Opti1 написал: Я же выше привел пример
пример чего? Не вижу толкового примера, подтверждающего, что проблема не в коде. То, что это Вы так думаете совершенно не значит, что так оно и есть. Но дело Ваше: не в коде, так не в коде. Удачи!

P.S. как уже писал - работал с такими объемами данных и как ни странно - почему-то проблемы с переполнением памяти были исключительно в коде, который не учитывал ограничения VBA на использование ресурсов ПК и особенностей открываемых файлов и все в том духе. И правка кода как правило помогала избегать этих проблем, если знать что надо в итоге получить. Но это всего лишь мой личный опыт. И он Вам явно не интересен. Вам надо одно - узнать как увеличить оперативку. Вот ответ: ставьте 64-битную ОС и такой же Excel. При этом ОС лучше максимальную - тогда ограничений по оперативке вообще не будет для ОС(до 124ГБ). И Excel сможет использовать 16Гб. Дерзайте!
Изменено: The_Prist - 13.06.2016 16:47:17
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_pirst вы не в адеквате немного :)
 
Как скажете. Вам в любом случае виднее. Мы-то вообще ничего не видим, кроме Ваших утверждений(не имеющих пока по собой реальной почвы для нас). Обсуждение в данной теме в результате покажет кто из нас более адекватен :)
Изменено: The_Prist - 13.06.2016 15:47:43
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:
Мы-то вообще ничего не видим
Ааа так вы еще и Николай 2 ... тогда все понятно ))))
 
Хм...Прикол насчет Николая не совсем понял, ну да ладно. Есть некие догадки. Только к делу это мало относится.
У Вас есть код, есть файлы. Их совместное использование вызывает проблему. Но Вы почему-то считаете, что виноват не код и не файлы - а только память, поэтому нам ни код ни файлы показывать не хотите. Так в чем проблема? Каких решений ждете от людей, если информации дали на 1%? Я выше написал как проблему с памятью можно решить: модернизируйте ПК, ОС, Офис. Других вариантов при Вашем подходе к проблеме вообще быть не может.
Изменено: The_Prist - 13.06.2016 16:00:34
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я таким слепым неадекватам просто поражаюсь, ну не знаешь решения проблемы ну промолчи, а ннет надо ведь что то написать, выделится, для людей со злабы зрением повторно привожу сообщение на русcком языке черными пикселями по белому фону:

Дело не в коде, и ни как на нем не завязано, вот простой смысл проблемы - откроейте ексель и в ячейке А1 напишите ну к примеру "999999" протяните его в строну ну ячеек на 30 и вниз ячеек на 200 тыщ вниз и посмотрите сколько будет занимать Ексель в оперативке, а теперь все эти заполеннные ячейки удалите и посмтрите сколько будет занимать ексель в оперативке - почти столько же!
Изменено: Opti1 - 13.06.2016 16:51:21
 
Opti1, штраф 30% за неуважение к помощникам.
Если так и дальше будете продолжать, получите бан
 
Цитата
Opti1 написал:
для людей со злабы зрением повторно привожу сообщение
Отвечу цитатой себя:
Цитата
The_Prist написал:
дело в том, что после удаления надо файл еще сохранить, а еще лучше закрыть. Тогда можно получить более реальные цифры по памяти. А пока не сохранили - за этим листом как бы зарезервирована память, если вдруг захочется Ctrl+Z нажать.
Могу лишь дополнить: удалять тоже надо грамотно - полностью строки. И обязательно после этого сохранять. А еще можно можно выполнить код:
Код
Sub tttt()
With ActiveSheet.UsedRange: .Value = .Value: End With
End Sub

Тогда есть большой шанс, что память вернется к тем параметрам, которые были ДО заполнения листа, т.к. строки удалили, буфер очистили(выполнение такого кода очищает его в большинстве случаев, если на листе остались данные), сведения о последней заполненной ячейке диапазона обновили.
Но это ничего не даст в плане обработки заполненных заранее файлов, если необходимо тянуть из них информацию, т.к. сомнительно, что из них допускается удалять эту информацию. Уж проще закрыть и очистить буфер обмена(хотя в правильном коде он как правило и не используется).

Будем дальше офтальмологические проблемы друг друга обсуждать или Вам все же решение какое-то нужно? Нет, ну я ладно - я неадекват по Вашим словам(еще и слепой, мне в Вашей теме делать нечего). Фиг с ним. Но Вы хоть остальным участникам дайте шанс поучаствовать. Еще раз повторю: то, что Вы считаете, будто проблема не в коде не означает, что проблему нельзя решить правкой кода. Нюансов у работы в VBA много и никогда не знаешь на какой наткнешься в этот раз. Это Вам не С++, чтобы вот так вот взять и памятью поуправлять напрямую из кода. И если проблема все же возникла - не совсем понимаю почему Вы так упорно хотите чего-то от форума, не показывая при этом код, когда от Вас его просят?
Изменено: The_Prist - 13.06.2016 17:28:03
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал: Могу лишь дополнить: удалять тоже надо грамотно - полностью строки. И обязательно после этого сохранять. А еще можно можно выполнить код:
Это я пробывал еще до заданного мной вопроса, помагает только полное закрытие екселя, не конкретного файла, а полностью екселя.

Цитата
The_Prist написал: то, что Вы считаете, будто проблема не в коде не означает, что проблему нельзя решить правкой кода
Код лишь выполняет то, что я делаю руками, только во много раз быстрее и не устает. Просто думайте, что я выполняю эту операцию с помощью руки и кликом мышки, вот и все.
 
Цитата
vikttur написал:
штраф 30% за неуважение к помощникам
Нарушение Правил п. 3.4. Тут процентами не отделаться: бан на 3 суток.
Страницы: 1
Читают тему
Наверх