2016-12-24 7 views
1

私のlast questionに続いて、あまりにも多くの変数が設定された場合にどうなるか知りたいと思います。バッチファイルにあまりにも多くの変数が設定されているとどうなりますか

もう一度私は同じスクリプトを持っています。もちろん、実行するのは永遠にかかります。

@Echo off 
Setlocal EnableDelayedExpansion 
For /L %%P In (1,1,999999999999) Do (
    Set Foo[%%P]=%%P 
    Echo !Foo[%%P]! 
) 

また、私は何が起こるか知りたいと思います。何か助けに感謝します。

+3

追加する必要はありませんでしたこれは新しい質問です。基本的に同じことをあなたの既存の質問に追加することができます。あなたはそれを試したとき何が起こったのですか?それはあなた自身の質問に答えることはできませんか? – Compo

+0

@Compo私はあなたに最初の質問を受け入れます。質問には、永遠にテストが必要です。それで私の質問に答えることはできません – SteveFest

+2

Windowsコマンドプロセッサは32ビットの符号付き変数を使用するため、最大数は2147483647です。高速にRAMを使用するために、 'Echo!Foo [%% P]! 'を削除し、各環境変数に7500文字の長さの文字列を指定します。 Windows XP SP3 x86でバッチファイルを実行しているコマンドプロセスは、すでに数分でプロセスエクスプローラに応じて158 MBのRAMが必要になります。また、RAM使用率が一時的に260 MBを超えることもあります。これは、環境変数テーブルを新しい大きなRAMブロックに移動した場合です。 – Mofi

答えて

1

変数を従来どおり設定している場合は、これが適用されます。 2,147,483,647個のバッチ変数を取得した場合は、もう1つを設定すると、符号付き整数が0にラップされ、以前に設定されたすべての変数が削除され、プロセスで多くのメモリがリークし、遅れ。ただし、これは致命的なWindowsエラーを引き起こすべきではありません。

しかし、setxを使用していて、過去2,147,483,647件のレジストリキーを取得していた場合、レジストリ全体が削除されてコンピュータが恒久的に破棄される可能性があります。しかし、連続したレジストリキーのオーバーヘッドが増加してコンピュータが完全に遅れてしまうので、誤ってこれを行うことに気をつける必要はありません。ただし、コンピュータが起動するたびにレジストリがRAMにロードされるため、再起動によって遅延が持続することがあります。だから、いいえ、それはあなた自身のためにこれをテストすることは賢明ではありません。しかし、レジストリにレジストリファイルをインポートして、RAMが十分にあり、コンピュータのアーキテクチャが64ビットの場合は、実際には可能です...

関連する問題