
GetProcessWorkingSetSizeの最小ワーキングセットサイズ、最大ワーキングセットサイズの意味が良く分かりません。
MSDN等で調べた結果、最小ワーキングセットサイズはそのプロセスがRAMにメモリーを確保しているサイズ、最大ワーキングセットサイズは仮想メモリーを使ってでも、そのプロセスで確保しているサイズの様な気がして来ましたが合っているでしょうか。
合っていれば、SetProcessWorkingSetSizeの最小ワーキングセットサイズはそのプロセスでRAMにメモリーを確保したいサイズ、最大ワーキングセットサイズは仮想メモリーを使ってでも、そのプロセスで確保したいサイズですよね。
お分かりに成る方、よろしくご回答下さい。
No.1ベストアンサー
- 回答日時:
ワーキングセットは、物理メモリ使用量のことなので、仮想メモリ量とは全く関係ありません。
最小ワーキングセットサイズ ≦ ある瞬間の実際のワーキングセット ≦ 最大ワーキングセットサイズ
そのプロセスにどれだけ物理メモリを使わせてもいいかを表します。
・これ以下になると、まともに動かない→最小サイズに指定
・これ以上使わせると、他のプロセスに迷惑→最大サイズに指定
ご回答ありがとう御座います。私の場合、今、カメラの画素サイズに合わせたメモリーを確保しようとしていますが、その場合、最小サイズは画素サイズとスタック等に使用するサイズであれば良いのでしょうか。
安直な考えですが、ActualProcessに対してGetProcessWorkingSetSizeで得た最小、最大サイズはスタック等を考慮していると思いますので、これに必要なサイズを各々加算してChangeWorkingSetし、その後VatualAlloc、VertualLockすれば当初の目的を安全に? 実行出来ると言う事に成るのでしょうか。
No.2
- 回答日時:
こんにちは。
しなくても出来る筈です。DWORD min, max;
::GetProcessWorkingSetSize(::GetCurrentProcess(), &min, &max);
const DWORD vaSize = max * 100;
//::SetProcessWorkingSetSize(::GetCurrentProcess(), min, vaSize);
VOID* p = ::VirtualAlloc(NULL, vaSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
::VirtualLock(p, vaSize);
for(int i = 0; i < vaSize; ++i)
{
LPBYTE pByte = (LPBYTE)p;
pByte[i] = i;
}
::VirtualUnlock(p, vaSize);
::VirtualFree(p, 0, MEM_RELEASE);
ただ、MSDNのSetProcessWorkingSetSize()APIの「解説」内で「慎重に使え」と書かれている通り、システム全体のパフォーマンスに関わって来る様な代物なので、おいそれと選択すべきではなさそうです。
カメラ画像のサイズがどれ程か分からないのですが、余りにもサイズが大きすぎて、パフォーマンスが不安であれば
メモリマップドファイル関連のAPI
http://msdn.microsoft.com/ja-jp/library/cc430093 …
を使用した方が簡単ではないでしょうか。
当方が知る限りでは、CD/DVD/BRのライティングソフトでは、巨大データをファイル化したものをメモリにマップしてから、焼き付けると言った方法を使用しているものがあります(ギガ単位なので普通に考えれば大抵そうなる)。
ご回答ありがとう御座います。
現在は200万バイトの領域1をchar[];で取っており、画素の少ないカメラの時も最大画素が取られてしまうのでvirtualAllocを使おうとしています。
今後、200万画素以上のカメラにも対応出来る様にする為にも。
ただ、MSDNの説明が良く分からず質問させて頂きました。パーフォーマンスに関しては、既に200万画素分固定で取っているので問題無いと思います。
少なくとも、Minに必要バイト数+ スタック等を確保すれば良い訳だと思います。Maxの指定があったので訳が分からなく成りました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アプリケーションが終了するま...
-
常駐するアプリケーションを初...
-
プロセスIDの再利用
-
プロセスIDからウィンドウハ...
-
OSPFでプロセスを分ける意義に...
-
explorer.exeが異様にメモリを食う
-
プロセスのアタッチ・デタッチ...
-
実行中のプログラムIDが取得...
-
VBスクリプトでIISのプロ...
-
コマンド実行時の結果のリダイ...
-
シェルで親プロセス終了時に子...
-
プロセスIDからプロセスの有無...
-
Windowsでのfork方法
-
プロセスIDの取得(タスクバー...
-
起動しているプロセスの確認
-
怪しいプロセス教えてください。
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
.NetのBackgroundWorkerクラス...
-
家電製品の電力周波数を変える機械
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タスクマネージャーのプロセス...
-
バックグラウンドのプロセスの...
-
プロセスのアタッチ・デタッチ...
-
OSPFでプロセスを分ける意義に...
-
ADOでアクセスのレコードに...
-
非表示になったエクセルは?
-
Process.Startの戻り値を後で取得
-
vb.netでEXCEL起動がうまくでき...
-
C#でのbatファイル実行結果取得
-
プロセスIDの取得方法について
-
Linuxでのスレッド間メッセージ...
-
Visual C++からpingを実行して...
-
SendMessageが失敗するときがある
-
IISがフリーズ
-
スティーブ・ジョブズはプログ...
-
c言語でプロセスIDを調べたい
-
特定ユーザーのプロセス情報を...
-
怪しいプロセス教えてください。
-
セマフォとmutexの違いは?
-
Windowsでのfork方法
おすすめ情報