1

我有一个循环计算多次的子例程。最近在 Excel 2016 中,我开始内存不足。

下面的演示代码在 2010、2013、甚至 2016 for Mac 中都可以,但是在 windows 2016 中,它在退出 Excel 之前没有释放的内存中累积了大约 500MB。不知道 2016 年这样的行为有多久了;昨天才开始注意到。

似乎是导致泄漏的工作表函数。我在我的真实循环中使用了许多工作表函数。任何想法如何冲洗这个?

Sub MemTest()

iend = 1000000

For i = 1 To iend

    deg2rad = Application.WorksheetFunction.Pi / 180

    deg2rad = Empty

Next i

End Sub
4

3 回答 3

2

我正在写有关 excel 2016 中内存泄漏的更新。似乎这个问题根本与我的代码无关。并且感谢指出关注工作表功能是反模式的人。

我第一次注意到内存泄漏是在 12 月下旬。在圣诞节期间,其他人在此论坛和其他人的其他线程中发布了类似的发现,微软回答说这是 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?授权=1

于 2016-01-10T02:36:25.920 回答
2

修复出来了!它位于 16.0.6366.2062 版本中,于 2016 年 1 月 25 日开始推出。如果您还没有更新,请转到文件 > 帐户 > 更新选项 > 立即更新。

谢谢你的耐心。

来自办公室团队的 Anneliese。

于 2016-01-30T00:51:02.627 回答
1

Application.WorksheetFunction.Pi 是一个常数,所以在代码请求时定义为常数。然后 deg2rad = Empty 是没有意义的,因为重新影响。

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

有时您应该使用“睡眠”或“等待”doevents 来缓解处理器

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
于 2015-12-19T10:05:53.543 回答