2015-12-19 2 views
0

У меня есть подпрограмма, которая много раз проводит вычисления. Недавно в Excel 2016 у меня закончилась нехватка памяти.память утечка рабочий лист excel 2016

Следующий демонстрационный код в порядке, 2010, 2013, даже 2016 для Mac, но в 2016 году для Windows он аккумулирует около 500 МБ в памяти, которая не будет выпущена до выхода из Excel. Не уверен, как долго 2016 года ведет себя так; только начал замечать это вчера.

Кажется, что функция рабочего листа вызывает утечку. Я использую несколько функций листа в моем реальном цикле. Любые идеи, как очистить это?

Sub MemTest() 

iend = 1000000 

For i = 1 To iend 

    deg2rad = Application.WorksheetFunction.Pi/180 

    deg2rad = Empty 

Next i 

End Sub 
+0

Как вы видите эти 500M? (это обмен, память процесса и т. д.)? – cutzero

+0

Просто просмотрите диспетчер задач и посмотрите, как заполняется память. Как только Excel достигнет 1,4 ГБ, он начнет сбой. После того, как эта процедура запускается в 2-3 раза, она разбивается. Можете ли вы повторить этот эксперимент и увидеть такое же поведение? – david

+0

нет, попробуйте приведенный ниже пример и проверьте, не вызывает ли утечка памяти, если ваш пример является реальным примером, который вызывает утечку памяти. – cutzero

ответ

1

Application.WorksheetFunction.Pi является константой, так определяют как константа в попрошайничество code.Then deg2rad = Empty бессмысленно, потому что reaffectation.

Sub MemTest() 
iend = 1000000 
const cPI = application.WorksheetFunction.Pi 'don't call it iend time 
For i = 1 To iend 

    deg2rad = cPI/180 'or deg2rad = 3.14159265358979 /180 

Next i 

End Sub 

Иногда вы должны облегчить процессор с «Sleep» или «ждать» DoEvents

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 
+0

Спасибо, да, я знаю, что это бессмысленно делать в цикле. Я использую другие триггерные функции, такие как Asin в моем реальном цикле. Я просто использовал пример Pi, чтобы показать поведение. Я не думаю, что могу удалить все функции рабочего листа из своего кода, поэтому я хочу знать, как исправить утечку памяти. – david

+0

Я думаю, что циклы требуют слишком быстрого создания объекта для освобождения памяти. ваш пример - своего рода антипаттерн. – cutzero

+0

Я думаю, что вы позволите своим петлям дышать, Excel не любит циклы, не ослабляя процессор и разрушение/создание объектов, что вы получаете добавление сна. – cutzero

1

Я пишу с обновлением об утечке памяти в Excel 2016. Кажется, что проблема не касалась моего кода вообще. И благодаря человеку, который указал, что сосредоточение внимания на работе листа было антипаттерн.

Впервые я заметил утечку памяти в конце декабря. За Xmas другие опубликовали похожие результаты в других потоках на этом форуме, а на других, и Microsoft ответила, что это ошибка в excel 2016, которая не освобождает память должным образом. В следующей ссылке есть исправление, и, надеюсь, будет исправлено исправление в ближайшее время.

http://answers.microsoft.com/en-us/office/forum/office_365hp-excel/excel-2016-macro-crashes-sometimes-gibes-an-out-of/37a7df04-9d1b-4b6b-b107-e8d0971e324e?auth=1

1

Исправление вне! Это в сборке 16.0.6366.2062, которая начала выкатываться на 1/25/16. Если у вас еще нет обновления, откройте «Файл»> «Аккаунт»> «Параметры обновления»> «Обновить сейчас».

Благодарим за ваше терпение.

Anneliese из Бюро.

Смежные вопросы