3

WSH 内で実行され、オブジェクト (たとえば、Scripting.FileSystemObject または任意の COM オブジェクト) を作成する Javascript プログラムでは、使い終わったときに変数を null に設定する必要がありますか? たとえば、これを行うことをお勧めしますか:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var fileStream = fso.openTextFile(filename);
fso = null;  // recommended?  necessary? 
... use fileStream here ...
fileStream.Close();
fileStream = null;  // recommended? necessary?

vars を範囲外にすることとは効果が異なりますか?

4

3 に答える 3

1

エッケハルト・ホーナーの言葉に基づいて...

VBScript、JScript、ASP などのスクリプトは、メモリを管理する環境内で実行されます。そのため、オブジェクト参照を Null または Empty に明示的に設定しても、必ずしもメモリから削除されるとは限りません...少なくともすぐには削除されません。(実際には、ほとんど瞬時に行われることが多いですが、実際には、タスクは環境内のキューに追加され、後で実行されます。) この点に関しては、思ったほど役に立ちません。

コンパイルされたコードでは、割り当てられたメモリがシステムに返されるように、プログラム (場合によってはコードのセクション) が終了する前にメモリをクリーンアップすることが重要です。これにより、あらゆる種類の問題が防止されます。実行速度の遅いコード以外では、これはプログラムが終了するときに最も重要です。ASP や WSH などのスクリプト環境では、スクリプトの終了時にメモリ管理がこのクリーンアップを自動的に処理します。したがって、すべてのオブジェクト参照は、明示的に自分で行わなくても null に設定され、このインスタンスでは混乱全体が不要になります。

スクリプト実行中のメモリに関する限り、問題が発生するほど大きな配列またはディクショナリ オブジェクトを構築している場合は、スクリプトの範囲をはるかに超えているか、コードで間違ったアプローチをとっています。つまり、これはVBScript では決して起こらないはずです。実際、環境では、これらの問題を最初から防ぐために、配列とディクショナリ オブジェクトのサイズに制限を課しています。

于 2011-04-30T08:15:41.063 に答える
0

メイン プロセスでは不要なオブジェクトをトップ/スタートで使用するスクリプトを長時間実行している場合、これらのオブジェクトを null に設定すると、メモリがすぐに解放される可能性があり、害はありません。他のポスターで言及されているように、実用的なメリットはほとんどないかもしれません。

于 2013-01-30T12:28:59.637 に答える