VC6でMFCのCFileクラスを用いてファイル書き込みのプログラムを作りました(下記の用な流れ)。
CFile f;
f.Open(〜〜);
f.Write(〜〜);
f.Flush();
f.Close();
ここで判らない事が発生しました。
Flush()メソッドの処理時間が、Windows2003Serverでは XP 時の数倍程度かかってしまいます。
又、Write()をコールせずに 単に Open() 後 Flush() をおこなっても同様で、
XP:0〜1msec、2003server:5〜15msec のような感じになります。
なにか変えれば2003ServerでもXPと同様の処理時間になるのでしょうか。
(OSの設定とか?)
ちなみにPC環境は以下のようになっています。
CPU:Celeron 2GHz
メモリ:512MB
ディスク:IDEの80GB
OS:XP Pro(SP2),2003Serverのデュアルブート
#質問は代理で行っていますので、確認が多少遅れる場合がありますので、ご了承ください。
ファイルサーバ系のサービスが起動していることで、パフォーマンスが落ちているとか?
関連しそうなサービスを止めて試してみるとか。
または、HDDベンチなどでも、同様に2003Serverのほうが結果が悪かったりしませんか?
ズバリ解決できる回答ではないかな。
http://support.microsoft.com/kb/822219/
You experience slow file server performance and delays occur when you work with files that are located on a file server
2003は該当するように書かれていませんが、こういう事例もあります。
HDBENCHで、XPと2003Serverを比べてみては。
http://forums.belution.com/ja/vc/000/220/51.shtml
[00022051] Re:CFileのWriteにFlushは必要?
ご存知かとは思いますが、Flush()は遅延書き込みをその場で同期するための関数です。
IISのサービスが起動していれば、その可能性もありますね。
Web(ASP)サーバとして外部公開していない状態で、IISが動いているのであれば停止すればパフォーマンスに影響しそうです。
ありがとう御座います。
有効性を調査してみます。
また、
HDBENCH でXPと2003serverを比較したら?ですが、
以前HDBENCH ver3.30でHDD性能を試したところ
Read、WriteはXPも2003もほぼ同等の数値でした。FileCopyだけが2003ではXP
の3分の1程度の値しか出ませんでした。
Read 50000
Write 50000
FileFopy XP :15000
2003:5000
http://www.atmarkit.co.jp/fwin2k/special/win9xorwin2k/win2kproce...
特集:Windows 9x or Windows 2000? 9.Windows 2000のプロセス管理メカニズム(2)
サーバー系のOSだと各種コンフィグレーション等がバックグラウンド優先になっていることが多いので、その影響も考えられます。
通常のXPだの2000だのはフォアグラウンド優先になってます。
また、単純に動いているサービスの数も種類も違うでしょうから、そういう条件もなるべく同じにしないと違って当然ということもあるかも知れません。
http://kugutsushi.s12.xrea.com/blog/index.cgi?id=9
傀儡師のプログラミング日記
また、時間測定法等も気になります。
Windowsの時間精度は通常10msec単位程度ですから。
高精度の時間が必要な場合はQueryPerformanceCounterを使う必要があります。
平均的な処理時間ならここまで精度はいらないとは思いますが。
ありがとう御座います。
検討いたします。
http://support.microsoft.com/default.aspx?scid=kb;ja;332023
書き込みキャッシュが有効な場合の遅いディスク パフォーマンス
いまいち自信はありませんが...
Win2K(SP3)以降はflush(APIのFlushFileBuffers)した時にディスクのバッファに対しても即座にディスクに書き込むよう命令するようになった模様。
質問ではXPと2003ですのでどちらも同じになってもいいようなものですが、
flush自体がドライブに対して命令を出しているのため2003の方が多くのプロセスが動いており、ドライブの書き込みバッファを多く消費し(flush時に書き込みし)ているのでは?(あくまで推測)
これを検証するには、デバイスのプロパティを確認して「書き込みキャッシュを有効にする」をOFFにして実験すると分かると思います。
ありがとう御座います。
まずは参考させていただきます。
URLはダミーです。
数MSということはタスク切替が起きているのではないでしょうか。
単純に、プロセッサのスケジュールをプログラム優先にしたら速くなったりしませんか?
ありがとう御座います。
チェックしてみます。
Yahoo! JAPAN
URLダミーです。
既出ではありますが、IISのサービスは動いているのでしょうか?
以前、Win2Kと2000Serverにて同じような経験があります。
その際は別マシンでしたが2000Serverのマシンの方が
はるかに高スペックにも関わらず、同処理に時間がかかるという事象で、
IISサービスを停止したら解決しました。
結局、HDをSCSI化したら、問題にならない程、高速になりました。
実は、本来の問題を追っている最中に、本問題にぶつかっていましたが、問題を起こしている実機が、
SCSIなので、実機と同じハードにしたら、あっさり本件はクリアしました。
ですが、裏に潜んでいた別の問題が顔を出してしまい、本件の回答が非常に遅れたことを、ご回答頂いた皆様に深くお詫びいたします。。。
ちなみに、本当の問題は、NTTネットワーク回線が帯域が細い上に、とある事情で帯域制限がかかり、
さらに帯域が細くなった結果、生まれたものと言うことが判明しました。
というわけで、大変申し訳ありませんでした。
またの機会に皆様のお知恵をお借りしたいと存じます。
どうもありがとうございました。
皆様、ありがとうございました。
ありがとうございます。
有効性を調査してみます。