1

計算を何度もループするサブルーチンがあります。最近、Excel 2016 でメモリ不足になり始めました。

以下のデモコードは Mac なら 2010 年、2013 年、2016 年でも OK ですが、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 月下旬でした。クリスマスに、他の人がこのフォーラムの他のスレッドや他のスレッドで同様の調査結果を投稿しており、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?認証=1

于 2016-01-10T02:36:25.920 に答える
2

修正が出ました!これはビルド 16.0.6366.2062 にあり、2016 年 1 月 25 日にロールアウトが開始されました。まだ更新プログラムを持っていない場合は、[ファイル] > [アカウント] > [更新オプション] > [今すぐ更新] に移動します。

お待ち頂きまして、ありがとうございます。

オフィスチームのアネリーゼ。

于 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 に答える