C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: RamMapを見るとActiveなメモリが異常


(過去ログ 123 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■73368 / inTopicNo.1)  RamMapを見るとActiveなメモリが異常なほど増えてる
  
□投稿者/ 橋本 巧 (1回)-(2014/09/17(Wed) 12:37:03)

分類:[C#] 

Windows8 64bit環境で、サイズの大きいファイル(32GB〜1TB)に32KB単位でランダムアクセスを頻繁に行うと、(タスクマネージャで見たところ)使用中のメモリが搭載メモリ容量(16GB)ぎりぎりまで占有してしまいます。
RamMapで見てみると、Active状態のMemory Priorityが5のMapped Fileが増えているのが原因だと分かったのですが、そのうまい回避方法がどうしてもわからないのです。

FileOptionsを色々変更してみましたが、大した影響はなく、

http://superuser.com/questions/422113/how-could-i-limit-or-even-disable-file-cache-on-windows-server-2008r2
http://www.dotnetthoughts.net/writing_file_with_non_cache_mode_in_c/

FILE_FLAG_NO_BUFFERINGフラグを使いキャッシュを回避する方法はセクタ単位でのアクセスに制限されてしまうし、
SetSystemFileCacheSizeを使いFileCacheのサイズ自体を制限する方法は、OS全体に影響してしまいます。

プロセス全体のMemory PriorityをNtSetInformationProcessを使って4にまで下げると、メモリが占有されることは無くなるのですが、プロセス自体のMemory Priorityが低いのでスワップアウトが頻繁に起こるようになり、プロセスが"応答なし"となることが多くなってしまいました。

FileStreamのPriorityだけを下げるか、Standby状態に移行させるにはどうすればいいのでしょうか?
また、なぜActive状態のMapped Fileが異常なほど増えてしまうのでしょうか?

質問ばかりになってしまいましたが、ご教示いただければ幸いです。
引用返信 編集キー/
■73374 / inTopicNo.2)  Re[1]: RamMapを見るとActiveなメモリが異常
□投稿者/ Azulean (340回)-(2014/09/17(Wed) 21:30:55)
2014/09/17(Wed) 21:31:12 編集(投稿者)

FileStream を使用している限り、避けられないかもしれません。
いっそのこと、直接メモリマップドファイルを扱ってみてはいかがでしょうか?

http://msdn.microsoft.com/ja-jp/library/dd997372.aspx

ファイルの指定した領域だけメモリマップでき、そこから Read することができますし、これによって改善する可能性があります。
引用返信 編集キー/
■73380 / inTopicNo.3)  Re[2]: RamMapを見るとActiveなメモリが異常
□投稿者/ なちゃ (5回)-(2014/09/18(Thu) 01:47:31)
No73374 (Azulean さん) に返信
> 2014/09/17(Wed) 21:31:12 編集(投稿者)
>
> FileStream を使用している限り、避けられないかもしれません。
> いっそのこと、直接メモリマップドファイルを扱ってみてはいかがでしょうか?
>
> http://msdn.microsoft.com/ja-jp/library/dd997372.aspx
>
> ファイルの指定した領域だけメモリマップでき、そこから Read することができますし、これによって改善する可能性があります。

メモリマップトファイルでマッピングしたファイルとメモリってそのままキャッシュ状態になったりしないんでしたっけ?
ちょっとよく覚えてないんですが。

というか、ランダムアクセスってどんなアクセスなんでしょうね。

Active状態になってるってことは必要な状態じゃないんですかね?
他に優先するべきメモリが必要になればStandbyになっていくでしょうし。
というかパフォーマンス的にそれが有利な状況ならほっといてもなっていきそうなもんですが…
つまりActiveってことはファイルアクセスの特性上それが一番パフォーマンス上有利だからそうなっているのでは?という。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -