>プログレスバー使うのが大げさかどうか訊かれても、そんなもんcase-by-caseでしょうに。
> その待ちが利用者に不安/不満を与えるのであれば、それを軽減する策を講じるってだけ。
すいません。
怒らせるつもりはなかったのですが・・・
大容量の比較処理に使う一般的な動作(表示)があると思っていたので、それとなく聞けばなんかい
い方法を教えてもらえると思ってました。
よくよく考えたら大容量の比較なんて、一般的なツールではあんまやらないですよね・・・
いろいろありがとうございました。
ReadFileが遅いなら
MappedFileにしたら?
大容量ファイルへのアクセスはMappedFileの方が高速にできたはずですよ。
CreateFileMapping調べてみてくだせぇ。
# CreateFileのフラグにシーケンシャルアクセスフラグつけたり
# バッファリングしないフラグつけても改善されんのかな?
SHFileOperationって、ファイルを操作するだけなので、その中を読んだりはしないでしょう。
<MSDN>
Copies, moves, renames, or deletes a file system object.
</MSDN>
# ReadFileだと副次情報が欠落しますし。
> CreateFileMapping調べてみてくだせぇ
早速調べてやってみました。
速いですね。
SHFileOperationのファイルコピーと同じぐらいで比較できるようになりました。
使用メモリもたいしたことないっぽいです。
ありがとうございました。
> SHFileOperationって、ファイルを操作するだけなので、その中を読んだりはしないでしょう
よくわかりませんが、それで高速にコピーできるわけですね。
ReadFileとWriteFileを繰り返してコピーしてるんだと勘違いしてました。
で、一応結論
■比較はCreateFileMapping,MapViewOfFileを使う
■時間がかかる容量のファイルであれば、砂時計等を表示する
■その他ほとんどの容量の少ないファイルは、比較をそのまま待つ(一瞬)
という感じです。
ありがとうございました。
> 使用メモリもたいしたことないっぽいです。
んーまぁ、これはある意味しょうがないんだけど、
MappedFileを使った場合もきちんとメモリは消費されます。
タスクマネージャとかで見てる限りだと
そんな風に見えないんだけれども、実際には
WorkingSetSizeも増えるし、当然メモリ空間の予約もされるわけで
VirtualSizeも増加します。
アクセスすればページフォルトが発生してメモリ空間のコミットも
行われるし、MappedFileだからメモリ食わないってことはないです。
# SHFileOperationって内部でDMAとか使ってドバーッと転送してるんじゃないかな?
# それならCPUもほとんど使わないしReadFile/WriteFileするよか
# バッファも使わない分早いはず。ただの推測ですけど(;´Д`)