Мой опыт с обновлениями SeriesCollection в том, что они очень неэффективно. В типичных случаях использования это несущественно, однако, когда между рабочей книгой открываются/закрываются чрезмерные/быстрые обновления, вы не только увидите инфляцию памяти, но и отставание обновления экрана.
Сначала это будет немного интуитивно понятным, но оно будет значительно менее ресурсоемким.
Он будет запускать 30 000 циклов в течение двух секунд на моей машине, при использовании менее 1 Мбайт дополнительной памяти против нескольких минут и 50 МБ всего за 1000 циклов с использованием SeriesCollection. Это чуть более 8 непрерывных часов при 1 обновление/секунду (при обновлении экрана ON), поэтому я надеюсь, что это сработает для вас.
Dim arrTableVals() As Integer
Dim iUbound As Integer
Dim iArrCount As Integer
iUbound = 20
'Resize your array with iUbound derived from elsewhere in your sub
ReDim arrTableVals(iUbound, 0) As Integer
'Populate the array where sheets/charts do not update
For iArrCount = 0 To iUbound
arrTableVals(iArrCount, 0) = iArrCount + 1
Next
'Assign the array to the chart source range
ActiveWorkbook.Sheets("Charts").Range("A2:A" & iUbound + 2).Value = arrTableVals
Excel имеет очень простой способ обработки памяти во время выполнения VBA, когда он взаимодействует с данными рабочего листа. Он очищает всю историю во время выполнения и не начинает запоминать снова до завершения (именно поэтому Undo исчезает). Я подозреваю, что SeriesCollections освобождены от этого, так как они могут быть обновлены отдельно от таблицы.
Не уверен в утечке памяти, но есть ли причина, по которой вы это делаете? Возможно, получится тот же результат с установкой серии в нулевые значения. Является ли это необходимостью обновлять каждую секунду? –
Привет, Брайан, приведенный выше код - это всего лишь проведенный тест, который понимает, почему у моего фактического макроса была утечка памяти. В моем фактическом макросе я периодически читаю из файла журнала и обновляю диаграммы excel в соответствии с извлеченными точками данных. Это с интервалом 1 с. Я заметил, что использование памяти достигает 900 МБ через 12 часов. –
Ведет ли он себя лучше, если вы дамте свои значения в диапазон рабочих листов, к которым привязана серия диаграмм, и пусть обновление диаграммы происходит автоматически при вводе новых данных? –