「このコマンドを実行するのに十分な記憶域がありません」エラーについて


おも  2009-04-07 11:27:06  No: 33921

10台近くに入れて問題なく動作していたDelphi自作ソフトを新しいパソコンに入れたところ、処理を重ねる内に「このコマンドを実行するのに十分な記憶域がありません」とエラーメッセージがでたりします。

いろいろ試行錯誤したのですが、パソコンのスペック(実装メモリ、HDD、仮想メモリ)はこれまでで最高のものであり、また、実際の使用量をモニターしても不足しているようには思えません。

googleで、「このコマンドを実行するのに十分な記憶域がありません」「 Delphi」をキーワードに検索してみると、結構同じような事例があるように思いますが、有効な解決策は示されていません。
http://www.google.co.jp/search?hl=ja&q=%E3%81%93%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AB%E5%8D%81%E5%88%86%E3%81%AA%E8%A8%98%E6%86%B6%E5%9F%9F%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93+Delphi&lr=

どなたか良い解決方法があれば教えていただけませんでしょうか。OSの再インストールでうまくいったよのような情報でもかまいませんし、あるいは、同じような現象を体験したというだけでもかまいませんのでよろしくお願いします。

Delphi6 Personal
WinXP Professional SP3

以下、箇条書きでまとまりありませんが、追加情報を書きます。

●ソフトはIEを操作してサイトを表示したり、例えば、googleでの検索結果を取り込んだりするような処理を実行

●ソフト起動時からいきなり使えなくなることはなく、処理を重ねるうちに使用不能になるが、これまでの使用実績に比べると問題にならないぐらいの処理回数段階で発生

●発生する負荷状態は一定していない

●エラーは「xxx.create」のような部分で発生している模様

●FastMMも導入していますが、エラーが発生してもメモリリークは検出されない

●このエラーが発生した場合には次のような現象がでますが、かならずそうなるわけでもない
  ■自作ソフトのメニュー数が減少(一部のメニューが表示されなくなる)
  ■マウスの右クリックでメニューがでない
  ■エクスプローラが開かない、開いても内容が表示されない
  ■タスクマネージャーが開かない、開いてもタブ数が少なかったり、内容が表示されない
  ■マウスは移動するが、多くの対象に対してクリックしても、何もおきない
  ■自作ソフト/IEウインドウ等、操作可能であるものを終了すると、クリック機能等は回復する

●Windows2000では発生していない

●WindowsXP Home Edition SP3では発生していない

●WinXP Professional SP3では、これで3回目だが、過去2回は問題なく動作していた
  ■この3回分のパソコンは知人の自作パソコンですが、CPUはすべて共通。
  ■問題なく動作したうちの1回は今回のエラーが発生しているものとハードディスクが違うだけの構成(CPU冷却能力不足で筐体変更)とのこと

とりあえずこんな感じですが、症状もあまり一定しないです。個人的には最後の記述のようにほとんど構成が同じマシンなのに片一方だけで起こっているというので???状態です。

よろしくお願いします。


???  2009-04-07 17:06:58  No: 33922

その問題のアプリはどんな処理をするものなのかな?
そのアプリを使用中にメモリ使用量が増えることはタスクマネージャで確認したの?
ハード構成が同じでも、常駐ものとか同時に動いてるアプリの種類は違うんじゃないの?


Manbon  2009-04-07 22:01:40  No: 33923

以下のような事例があった記憶があります。
どうでしょうか?

メモリをかなり食う処理発生
  ↓
メモリが少ないマシンではスワップが発生
  ↓
ディスクの容量が少ない、またはスワップ領域が少ない
  ↓
エラー発生


おも  2009-04-08 08:07:51  No: 33924

???さん、Manbonさん、レスありがとうございます。

常駐ものとか同時に動いているアプリは基本的に同じかむしろ少なく、バージョンが違うのかもしれないというぐらいです。実際のPCは自作ソフト以外は、まだ、OfficeのExcell、AcrobatReader、7zip、Norton、ZoneAlarm等しか入れておらず、これらはバージョンはさまざまかも知れませんが、以前の構成が同じPCにも入れていましたし、他のPCにも入っています。

パソコン構成、タスクマネージャーでのメモリ状況例を以下に示します。

●現状の動作確認状況

■自作ソフト動作良好
CPU Athlon 800MHz
RAM 512MB
HDD 8.46GB
空き容量 1.73GB
仮想メモリ 初期サイズ 768MB 最大768MB
OS Windows 2000 SP4

■自作ソフト動作良好
CPU Pentium4 1.9GHz
RAM 512MB
HDD 17.5GB
空き容量 3.5GB
仮想メモリ 初期サイズ 768MB、最大1536MB
OS Windows XP HomeEdition SP3

■自作ソフト動作不良
CPU Athlon XP 1900+ 1.59GHz 2個搭載
RAM 1GB
HDD 112GB
空き容量 99.3GB
仮想メモリ 初期サイズ 3072MB 最大サイズ 3072MB 

●メモリ状況(細かい部分は厳密ではありません)

■ほぼPC起動のみ
コミットチャージ
合計 177MB
制限値 4094MB
最大値 179MB

物理メモリ
合計 1048MB
利用可能 782MB
システムキャッシュ 158MB

カーネルメモリ
合計 38MB
ページ 29MB
非ページ 9MB

■自作ソフト起動
コミットチャージ
合計 203MB
制限値 4094MB
最大値 205MB

物理メモリ
合計 1048MB
利用可能 760MB
システムキャッシュ 185MB

カーネルメモリ
合計 41MB
ページ 32MB
非ページ 9MB

自作ソフト 32MB

■エラー発生時(IEの表示、表示されたページ内容取得処理を繰り返す、IEはほぼ非表示)
コミットチャージ
合計 305MB
制限値 4093MB
最大値 307MB

物理メモリ
合計 1048MB
利用可能 652MB
システムキャッシュ 229MB

カーネルメモリ
合計 46MB
ページ 36MB
非ページ 10MB

自作ソフト 37MB

IE 114MB

■自作ソフト/IE 終了
コミットチャージ
合計 173MB
制限値 4093MB
最大値 307MB

物理メモリ
合計 1048MB
利用可能 780MB
システムキャッシュ 241MB

カーネルメモリ
合計 45MB
ページ 35MB
非ページ 10MB


KHE00221  2009-04-08 10:59:36  No: 33925

VRAMはどうなってる?


おも  2009-04-09 06:12:47  No: 33926

KHE00221さん、レスありがとうございます。

上述の3台のマシンを今後、上から順番にPC1、PC2、PC3と呼ぶことにします。

VRAMはそれぞれのマシンで次の通りです。

PC1 : 8MB
PC2 : 64MB
PC3 : 64MB


KHE00221  2009-04-09 09:05:45  No: 33927

動作不良がPC1ならVRAM足りないだけだと思うけど・・・

PC3 の CPU を 1個にしたらどうなるかな?


おも  2009-04-10 06:29:14  No: 33928

KHE00221さん、レスありがとうございます。

>>PC3 の CPU を 1個にしたらどうなるかな?

現在、工具があまりそろっていないのと、今週末は時間が取れません。
私でもできるようでしたら、来週にでも結果は載せたいと思います。


Delphi大好き  2009-04-10 10:04:11  No: 33929

初心者の意見で恐縮ですが・・・。

自分も先ほどこのエラーが出ました。
白紙Canvasへのフォントの360度回転の仮描画のループ処理で、
「この処理を行うにはメモリが足りません」
と出ました。

環境はWinXP  SP3  Delphi3&TurboDelphi2006(無償版)です。

CanvasのクリアにTBitmap.Create;を使っていたのですが、
原因はBitmap.Freeの記述忘れでした。^^;;

そこで思ったのですが、
開放し忘れたメモリや、バグ等でのループで蓄積した開放されなかったメモリがあふれて、
オーバーフロー(?)を起こすのではと思ったのですが・・・

以前も、画像データベースソフトを作った時に、
データベースのループ処理で同じエラーが出ました。
その時は何も考えずに、とりあえず「再起動」ボタンを追加して逃げましたが^^;。

どれも繰り返し処理でのエラー、と共通してるので、
もしかしたらと思った次第です。

特定の環境での発生では無いので、
的外れ的な感も無きにしもあらずですが^^;

もし参考になれば幸いです。


Delphi大好き  2009-04-10 15:31:04  No: 33930

X「この処理を行うにはメモリが足りません」ではなく、
○「このコマンドを実行するのに十分な記憶域がありません」
の書き違いでした^^;。


おも  2009-04-10 21:25:42  No: 33931

Delphi大好きさん、レスありがとうございます。

>>開放し忘れたメモリ

もともと、LeakCheckerを導入していて、一応メモリーの開放し忘れはチェックはしていました。
 http://hp.vector.co.jp/authors/VA015850/delphi/fragments/LeakChecker.html

さらに、メモリのリークチェックだけでなく、メモリの断片化問題も改善してくれるらしいFastMMを入れてみたんですが、残念ながら解決しませんでした。

http://mrxray.on.coocan.jp/Others/UsageFastMM.htm


ofZ  2009-04-10 22:04:54  No: 33932

LeakCheckerを使ったことはないのですが、
例えば、以下はメモリーリークになりません。

procedure TForm1.Button1Click(Sender: TObject);
begin
  TButton.Create(Self);
end;

フォームの破棄で、自動的に破棄してくれます。
引数をnilにすると、メモリーリークします。

目に見えない開放し忘れがあるのではないでしょうか?


武田  2009-04-11 01:07:20  No: 33933

私もDelphi 6Personalで自作ソフトを作成していますが同じ経験があります。
原因を追及するほど、知識が有りませんので、
メモリーの解放関係をチェックして異常がないのでもうお手上げかと思っていて、
たしか、どこかでHDDのエラーが考えられると書いてあったので
HDDのプロパティのツールでエラーチェックし、
エラーは復元としてやって直ったような気がします。
当てになりませんが、プログラムの変更などしませんでした。
その後でていません。


おも  2009-04-11 08:19:00  No: 33934

ofZさん、武田さん、レスありがとうございます。

ofzさんのご指摘内容、LeakCheckerを過信してはダメということで非常に興味深い内容ですね。

武田さん、こちらも非常に興味深いご指摘です。今、また別の知人のところで、Dell製Note(OS XP Professional SP3)に自作ソフトを入れてみたところ、問題なく動作しています。これで、たぶん、OSの違いによるという一番恐れていた原因はなさそうに思います。

そして、ご指摘のHDDの不具合の原因説、今、出先なのでトラブルシューティングはできないのですが、なんとなくビンゴのように思います。知人はたくさんのパーツストックを持っており、それらを組み合わせて作ってもらったのですが、OSはライセンス認証なので、HDDフォーマット→再インストールしているはずですし、今一度確認が必要ですが、CPUは間違いなく同じなのですが、HDDは別のものが搭載してある可能性はあると思います。


おも  2009-04-11 15:13:11  No: 33935

>>HDDは別のものが搭載してある可能性はあると思います。

これ、自分の中での認識が混乱していましたが、最初の投稿時点で知人に確認していたようです。

>>  ■問題なく動作したうちの1回は今回のエラーが発生しているものとハードディスクが違うだけの構成(CPU冷却能力不足で筐体変更)とのこと

大変失礼しました。

が、解決への期待は大きくなりました。


おも  2009-04-16 09:47:06  No: 33936

途中経過を載せておきます。

●HDDのエラーチェック
  気持ち程度繰り返し処理の負荷が伸びたのではと思われましたが、残念ながら、結局、エラー発生となりました。

●HDDのデフラグ
  エラーチェックに連想を得て、デフラグをしてみましたが、これもエラー発生となりました。


おも  2009-05-12 10:01:50  No: 33937

現象の絞り込みができたので報告します。

問題となる現象は自作ソフトから操作しているIE6でのウインドウのオープン/クローズ繰り返し時のIEの使用メモリ増加のPCマシン毎の違いから来ていました。

すでにIE6のウインドウがあり、さらに別の新規ウインドウを開いて、その新規ウインドウのみを閉じる動作をさせたときに違いがでます。既存のIE6ウインドウがない状態から、新規ウインドウを開いて、閉じる場合は、どのマシンでもiexplore.exeのプロセス自体が開放され、メモリ使用量もクリアされます。実使用においては、既存のIE6ウインドウがある状態での使用になります。

実際例を示します。次の投稿で示すテストプログラムを実行し、IE6のメモリ使用量をモニターしました。IE6で開いたのは、ローカルディスクにおいた10kB程度のテキストファイルの拡張子を'.html'に変更したもの(テスト.html)です。テスト.htmlを1つ開いておいた上で、プログラムにより新規にテスト.htmlのオープン/クローズを繰り返しました。
なお、保存しているページの新しいバージョンの確認は、すべてのマシンで「自動的に確認する」です。

●PC1 : 自作ソフト実行時問題なし
IE version: 6.0.2800.1106 更新バージョン : SP1; Q823353;
 200回目   12.34 MB 
 100回目   12.16 MB
  75回目   12.23 MB
  50回目   12.18 MB
  10回目   12.13 MB
   1回目   11.89 MB

●PC2 : 自作ソフト実行問題なし
IE version: 6.0.2900.5512.xpsp_3_gdr.090206-1234 更新バージョン:SP3;
 100回目   16.75 MB 
  75回目   16.18 MB
  50回目   15.54 MB
  10回目   14.51 MB
   1回目   14.06 MB

●PC3 : 自作ソフト実行NG - 記憶域不足エラー
IE version:6.0.2900.5512.xpsp_sp3_gdr.090206-1234 更新バージョン:SP3; 
  75回目   34.05 MB
  50回目   30.50 MB
  10回目   24.66 MB
   1回目   23.22 MB
※80回目の試行時に「このコマンドを実行するのに十分な記憶域がありません」エラー発生

※PC1とPC2の試行回数が違うのには特に他意はなく、メモリ使用量が減少する場合もあるのだが、PC1の100回目がそうであったので、200回目を参考程度に掲載

■上記のテスト結果からすると、PC2は自作ソフトでの実際使用で不具合が現れていないのは、単に繰り返し回数が許容範囲内に収まっているからだけかも知れません。ただ、実際のサイトへ接続した場合には、PC3だとメモリ使用量の増加の仕方がかなり目立ちますが、PC2では目立ちません。また、今回のテスト時でもPC3は不具合を起こしてますが、トータルのメモリ使用量としては問題ある大きさには思えません。

次の投稿にテストプログラムソースを載せますので、みなさんの環境ではどうなのか教えていただけますと幸いです。よろしくお願いします。


おも  2009-05-12 10:03:47  No: 33938

IEオープン/クローズに伴うメモリ使用量モニターテスト方法

IE7はシングルタブにしたり、その他にも設定が必要となりますのでIE6でテストしてください。

手順
1 TButton:2個、TLabel:1個をForm上に配置
2 Unit1.pasを丸ごと以下のソースコードに変更
3 Button1、Button2のOnClickイベントを関連づけてコンパイル
4 適当なサイズのテキストファイルの名称を拡張子の変更も含めて'テスト.html'としてアプリケーションと同じフォルダ階層に置く
5 テスト.htmlをまず一つ開いておく
6 テストプログラム起動
7 Button1クリックでテスト開始(1回目は少し時間がかかるようです。)
8 Button2クリックで終了し、その時点でIE6のメモリ使用量をモニターした'log.txt'が開きます。

※ 実行時にIE6のオープン/クローズを見たい方は 'objIE.Visible:=False;'の部分をTrueにしてください。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ComObj,TlHelp32,PSAPI,ShellAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private 宣言 }
    TryCount:Integer;
    BaseDirectory:String;
    forAbort:Boolean;

    procedure SaveLog(sIEMem:String);
    procedure SaveIEMemory;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SaveLog(sIEMem:String);
var
  s,TxtInFile:String;
  slTxtIn:TStringList;
begin
    TxtInFile:=BaseDirectory+'log.txt';
    slTxtIn:=TStringList.Create;
    if FileExists(TxtInFile) then begin
        slTxtIn.LoadFromFile(TxtInFile);
        slTxtIn.Insert(0,'');
    end;
    s:=Format('%3S回目 %10S',[IntToStr(TryCount),sIEMem]);
    slTxtIn.Insert(0,s);
    slTxtIn.SaveToFile(TxtInFile);
    slTxtIn.Free;
end;

procedure TForm1.SaveIEMemory;
var
  ProcessID:DWORD;
  ListHandle,hProcess:THandle;
  sExeName:String;
  Flag:Boolean;
  Pr:TProcessEntry32;
  MemInfo:TProcessMemoryCounters;

  function UnitConv(MemIn:Cardinal):String;
  var
    Mem:Double;
  begin
      Mem:=MemIn;
      if MemIn<1024 then begin
          Result:=FormatFloat('#,##0 B',Mem);
      end else begin
          Mem:=Mem/1024;

          if Mem<1024 then begin
              Result:=FormatFloat('#,##0 KB',Mem);
          end else begin
              Mem:=Mem/1024;
              Result:=FormatFloat('#,##0.00 MB',Mem);
          end;
      end;
  end;
begin
    ListHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if ListHandle<>-1 then begin
        try
            Pr.dwSize:=sizeof(TProcessEntry32);
            Flag:=Process32First(ListHandle,Pr);
            while Flag do begin
                sExeName:=ExtractFileName(Pr.szExeFile);

                try
                    if UpperCase(sExeName)<>'IEXPLORE.EXE' then Continue;

                    ProcessID:=Pr.th32ProcessID;

                    FillChar(MemInfo,SizeOf(MemInfo),0);

                    hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessID);
                    try
                        if hProcess>0 then begin
                            MemInfo.cb:=SizeOf(MemInfo);
                            if GetProcessMemoryInfo(hProcess,@MemInfo,SizeOf(MemInfo)) then begin
                                SaveLog(UnitConv(MemInfo.WorkingSetSize));
                                Break;
                            end;
                        end;
                    finally
                        CloseHandle(hProcess);
                    end;
                finally
                    Flag:=Process32Next(ListHandle,Pr);
                end;
            end;
        finally
            CloseHandle( ListHandle);
        end;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
  sURL,sFileName:String;
  objIE:Variant;
begin
    forAbort:=False;

    //テストアプリディレクトリー情報
    BaseDirectory:=ExtractFilePath(Application.ExeName);

    sURL:=BaseDirectory+'テスト.html';

    TryCount:=1;
    for i:=0 to 1000 do begin
        Application.ProcessMessages;

        Label1.Caption:=IntToStr(TryCount)+'回目試行中';

        //ESCキーで中断
        if GetAsyncKeyState(VK_ESCAPE)<>0 then Break;

        //ボタンによる中断
        if forAbort then Break;

        //IE操作オブジェクト作成
        objIE:=Createoleobject('InternetExplorer.Application');
        objIE.Visible:=False;

        try
            objIE.Navigate(sURL);

            while objIE.busy do Application.ProcessMessages;
            while objIE.readyState<>4 do Application.ProcessMessages;

        finally
            objIE.Quit;
            objIE:=Unassigned;
            Sleep(500);
        end;

        if TryCount=1 then SaveIEMemory;
        if (TryCount mod 5)=0 then SaveIEMemory;

        Inc(TryCount);
    end;
    Label1.Caption:=IntToStr(TryCount)+'回目終了';

    sFileName:=BaseDirectory+'log.txt';
    ShellExecute(Handle,'open',PChar(sFileName),'',PChar(ExtractFilePath(Application.ExeName)),SW_SHOW);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    forAbort:=True;
end;

end.


おも  2009-05-12 16:06:20  No: 33939

IE6のバージョンの記述ミス訂正

PC2とPC3は同じで、PC3の方が正しいです。

IE version:6.0.2900.5512.xpsp_sp3_gdr.090206-1234 更新バージョン:SP3;


monaa  2009-05-12 22:39:56  No: 33940

IEのメモリリーク問題
http://p2b.jp/index.php?UID=1131336575
ひょっとしてこれの事ですかね。
IE6までらしいので、バージョンあげればそれで解決しそうです。
こういう問題はプログラムから修正できませんから、
周知してもらってバージョンあげてもらうしかないと思います。
IEエンジン使うのならIEのバグは仕方ない事とあきらめるしかないと思います。


monaa  2009-05-12 23:10:44  No: 33941

[MS07-033] Internet Explorer 用の累積的なセキュリティ更新プログラム 
http://support.microsoft.com/kb/933566/
で修正されたみたいです。
Windows XP ベースのコンピュータで JScript スクリプトを使用する Web ページを表示すると、Internet Explorer 6 でメモリ リークが発生する
http://support.microsoft.com/kb/929874/

http://d.hatena.ne.jp/zorio/20070626/1182875782(引用


おも  2009-05-13 16:20:19  No: 33942

monaaさん、レスありがとうございます。

ご指摘のサイト(http://p2b.jp/index.php?UID=1131336575)は現象を絞りこんだ時点で見たのですが、テストページ(http://p2b.jp/demo/IE-memory-leak1.html)をPC3マシンで開いて、リロードしても生成時間がどんどん長くなることはなく、IEXPLOERE.EXEのメモリも目に見えて増えることはありませんでしたので、違う現象と判断しました

また、

>>JScript スクリプトを使用する Web ページを表示すると、Internet Explorer 6 でメモリ リークが発生する

に関しましても、私のテストに使用しましたのが、単なるテキストファイルの拡張子を変更したものなので該当せずと思われます。

>>IEエンジン使うのならIEのバグは仕方ない事とあきらめるしかないと思います。

おっしゃられるように、Delphiそのものが原因となる現象ではなさそうではありますが、まだ、問題現象が出たマシンが1台のみであり、IE6そのものが原因かどうかも不確かなのですっきりせず、もう少し突き詰めたいと思っています。


monaa  2009-05-13 18:34:28  No: 33943

あちゃ、違うんですね。
もちろん、周知のバグでないなら特定したほうがよろしいかと思います。
残念ながら環境依存性が高いようなのでお役には立てなそうです。


DEKO  2009-05-14 10:41:38  No: 33944

では、objIE.Quit で抜ける前に、
objIE.Navigate('about:blank');
を実行してから抜けるとか、

objIE.Navigate('about:blank'); // (1)
// (1)のローディング待ち
objIE.Navigate(sURL); // (2)
// (2)のローディング待ち
(実際の処理)
objIE.Navigate('about:blank'); // (3)
// (3)のローディング待ち
objIE.Quit;

のように、"about:blank" でサンドイッチしてみてはどうでしょう?


おも  2009-05-15 09:54:00  No: 33945

monaaさん、DEKOさん、レスありがとうございます。

DEKOさんのご提案に沿ってプログラムを変更してテストしてみました。また、PC3については、sURLそのものを'about:blank'にしてのテストもしました。
予め開いておくファイルはすべて前回と同じローカルディスクにおいた10kB程度のテキストファイルの拡張子を変更したものです。

●PC1 : 自作ソフト実行時問題なし
 200回目   12.43 MB
 100回目   12.17 MB
  75回目   12.28 MB
  50回目   12.24 MB
  10回目   12.25 MB
   1回目   11.96 MB

●PC2 : 自作ソフト実行問題なし
 200回目   19.13 MB
 100回目   16.57 MB
  75回目   15.91 MB
  50回目   15.25 MB
  10回目   14.22 MB
   1回目   13.89 MB

●PC3 : 自作ソフト実行NG - 記憶域不足エラー
  75回目   30.63 MB
  50回目   28.22 MB
  10回目   24.47 MB
   1回目   23.36 MB
※前回と同じ80回目の試行時に「このコマンドを実行するのに十分な記憶域がありません」エラー発生

元々のテストプログラムでsURLそのものを'about:blank'にしてのPC3のみのテスト
●PC3 : 自作ソフト実行NG - 記憶域不足エラー
  75回目   29.68 MB
  50回目   27.52 MB
  10回目   24.11 MB
   1回目   23.26 MB
※同じ80回目の試行時に「このコマンドを実行するのに十分な記憶域がありません」エラー発生

■1回のみのテストですが、メモリ使用量が若干減ったような感じはありますが、現象そのものの回避には至りませんでした。
なお、テストはPC再起動直後に実施していますが、PC3の不具合がすべて80回目の試行時に発生という結果になりました。


DEKO  2009-05-15 12:10:25  No: 33946

...ダメでしたか。お役に立てずにすみません。

"このコマンドを実行するのに十分な記憶域がありません"
が出るアプリケーションはメモリリークしまくっているものが多いのですが、
今回の件はそれに該当しないようです。

そのほかの要因でこのエラーに遭遇したのは私が知る限り、
・メモリを多く積んだPCで"仮想メモリなし"にしてあった。
・仮想メモリの位置に軽微なHDD故障があった。
この2点があります。

PC3の仮想メモリは大きめに取ってあるようなので、
・256MBとかで試してみる。
・他のドライブに仮想メモリを取ってみる。
一度コレを試してみてもいいかもしれませんね。


おも  2009-05-16 11:23:19  No: 33947

DEKOさん、レスありがとうございます。
とても助けになっており感謝しています。

>>・仮想メモリの位置に軽微なHDD故障があった。

最初の投稿時点では、PC3への3回目のライセンス認証待ちOSインストールだったのですが、現在は4回目になってます。もう少し今の状態で調べておけるなら調べておきたいということもあり、HDDの交換はしていません。が、大変心強いご指摘です。

>>・256MBとかで試してみる。

アドバイス頂いた仮想メモリに関する試行は、後だしのようで心苦しいですが、問題現象絞りこみ前の自作ソフトでは、ご提案に近い試行をして見ました。
ただ、仮想メモリは増やす方と、まったく使用しないという状況を試したと記憶しており、ご提案のような意図を持った256MBとかはやっておりませんでした。

>>・他のドライブに仮想メモリを取ってみる。

HDDは1つなのですが、2つのパーティションで、二つのドライブとなっており、問題現象絞りこみ前の自作ソフトでは試行はしていました。

今回、テストプログラムで実行してみたところ、少し変わった結果になりました。テストプログラムのソースは最初に搭載したものです。

※ドライブはCとDで、今までに通常使用していたのはCドライブです。
※以下テストした順番に結果を示します。

PC3
Cドライブ 仮想メモリ 初期256MB 最大256MB
 80回目   22.52 MB
 75回目   21.86 MB
 50回目   18.29 MB
 10回目   12.41 MB
  1回目   10.99 MB
※81回目の試行時に「このコマンドを実行するのに十分な記憶域がありません」エラー発生
※初めて80回目以外での発生

PC3
Dドライブ 仮想メモリ  初期256MB 最大256MB
 75回目   22.35 MB
 50回目   18.75 MB
 10回目   12.87 MB
  1回目   11.41 MB
※80回目の試行時に「このコマンドを実行するのに十分な記憶域がありません」エラー発生

※事前に一つ開いておく'テスト.html'がテスト終了後の気がついた時には二つ開いており、条件が違ったかと再度テスト

PC3
Dドライブ 仮想メモリ  初期256MB 最大256MB
 75回目   34.09 MB
 50回目   30.57 MB
 10回目   24.61 MB
  1回目   23.28 MB
※80回目の試行時に「このコマンドを実行するのに十分な記憶域がありません」エラー発生

※仮想メモリ256MBでのテストでは、IE6のメモリ使用量が減少するのかと思ったのに、元のレベルに戻っていたので、再度テスト

PC3
Dドライブ 仮想メモリ  初期256MB 最大256MB
365回目   65.10 MB
300回目   58.11 MB
200回目   47.34 MB
100回目   36.56 MB
 75回目   33.76 MB
 50回目   30.23 MB
 10回目   24.36 MB
  1回目   22.98 MB
※370回目の試行時に「このコマンドを実行するのに十分な記憶域がありません」エラー発生

PC3
Dドライブ 仮想メモリ  初期256MB 最大256MB
 75回目   34.12 MB
 50回目   30.63 MB
 10回目   24.65 MB
  1回目   23.19 MB
※80回目の試行時に「このコマンドを実行するのに十分な記憶域がありません」エラー発生

※この後、Dドライブでの再試行、そして、Cドライブで仮想メモリ 3072MB、256MBなどを少し実施しましたが、初期のIE6メモリ使用量は23MB程度で、11MB程度のケースは再現されませんでした。

■一度のみですが、大幅に80回の壁を越えた結果が得られたこと、IE6のメモリ使用量レベルが変化した状態も現れたこと、と現象が広がったようです。

これについては、もう少し試行してみます。また、本当に別のHDDに仮想メモリを確保するというのもやってみたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加