初めまして。どうしても分からない事があり、質問させて頂きます。
WindowsAPIのShellExecuteEXを使用して、他のアプリを起動させたりしているのですが
何故かShellExecuteEX関数を使用するとメモリ使用量が急に増えてしまいます。
場合によっては1~2M程増えました。
関数をコールすればメモリ使用量が増えるのは分かりますが
どうしてShellExecuteEX関数の時はメモリの使用量がこれほど増えるのでしょうか?
ご教授頂けると幸いです。
うーん、なんと言ったらいいのかなー
512MBはおろか、1GBや2GB積んだPCも珍しくない昨今で、1-2MBなんてゴミみたいなもんだから、それが本当にShellExecuteEXによるものなのか検証するのは無理じゃない?
きみはそれが本当に誤差じゃなく、ShellExecuteEXによるものだと断言できるの?またバックグランドで動いてるタスクの影響等がないと言い切れるの?質問する前にそもそもそこら辺から検証しないと駄目なんじゃない?
また仮にShellExecuteEXだとして、1-2MBの差って上記のように苦労して検証する意味があるんかいな?ひょっとしていまだにWin95でメモリが32MBとかなんかな…
まあ最後に一応のヒントとして、単なるShellExecute()やCreateProcess()、system()なんかで実行すると結果はどうなる?本当に調べたいならまずはそこら辺の検証からだろうね。
ShellExecute系の関数は、CreateProcess系の関数と違って、シェルから実行をかけているところが影響しているのかも(勝手な憶測ですが)?
後比較してみては?
・ShellExecute()で実行した場合
→これで差が出るならShellExecuteEx()にあってShellExecuteにない
「呼び出した結果起動されたアプリケーションに関する情報」を取
得するのにメモリを多少使っているのかもしれませんね。
・ShellExecuteEx()で開こうとしているものを別のものにしてみる
→これで差が出れば、実行するアプリケーションや開くファイルによ
って、使用するメモリが異なるのかもしれませんね。
ただ、通りすがりさんの言うとおり、1〜2MB程度のメモリ使用量の増加をこの関数に限定して検証するのは難しいと思いますが・・・。
まずはそこを検証した方がよいのでは?
ご返信が遅くなり大変申し訳ありません。
>とおりすがりさん
ShellExecuteEXが原因と思ったのは、CreateProcessや他の関数と比較したためです。
3台のパソコンで試してみましたが、やはりShellExecuteEXが一番メモリを持っていっています。
でも、とおりすがりさんの仰るとおりに1~2Mで難しく考える必要はないみたいですね・・・
>どらさん
有難うございます。
ShellExecuteはまだ検証していませんでしたので、試して見たいと思います(^^
お二方にはご教授頂きまして、本当に有難うございました。
ツイート | ![]() |