スバリ解決で1000ポイント差し上げます。

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のデュアルブート
#質問は代理で行っていますので、確認が多少遅れる場合がありますので、ご了承ください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/06/22 15:54:29
  • 終了:--

回答(6件)

id:typista No.1

typista回答回数359ベストアンサー獲得回数72005/06/01 16:25:06

ポイント35pt

ファイルサーバ系のサービスが起動していることで、パフォーマンスが落ちているとか?

関連しそうなサービスを止めて試してみるとか。

または、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()は遅延書き込みをその場で同期するための関数です。

id:takumitakumi

ありがとうございます。

有効性を調査してみます。

2005/06/01 16:32:12
id:typista No.2

typista回答回数359ベストアンサー獲得回数72005/06/01 17:02:54

ポイント35pt

IISのサービスが起動していれば、その可能性もありますね。

Web(ASP)サーバとして外部公開していない状態で、IISが動いているのであれば停止すればパフォーマンスに影響しそうです。

id:takumitakumi

ありがとう御座います。

有効性を調査してみます。

また、

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

2005/06/01 18:11:12
id:terra5 No.3

terra5回答回数57ベストアンサー獲得回数02005/06/08 20:29:01

ポイント70pt

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を使う必要があります。

平均的な処理時間ならここまで精度はいらないとは思いますが。

id:takumitakumi

ありがとう御座います。

検討いたします。

2005/06/13 18:14:02
id:ohmix1 No.4

ohmix1回答回数235ベストアンサー獲得回数142005/06/09 12:39:19

ポイント70pt

http://support.microsoft.com/default.aspx?scid=kb;ja;332023

書き込みキャッシュが有効な場合の遅いディスク パフォーマンス

いまいち自信はありませんが...


Win2K(SP3)以降はflush(APIのFlushFileBuffers)した時にディスクのバッファに対しても即座にディスクに書き込むよう命令するようになった模様。


質問ではXPと2003ですのでどちらも同じになってもいいようなものですが、

flush自体がドライブに対して命令を出しているのため2003の方が多くのプロセスが動いており、ドライブの書き込みバッファを多く消費し(flush時に書き込みし)ているのでは?(あくまで推測)


これを検証するには、デバイスのプロパティを確認して「書き込みキャッシュを有効にする」をOFFにして実験すると分かると思います。

id:takumitakumi

ありがとう御座います。

まずは参考させていただきます。

2005/06/13 18:16:23
id:firewood No.5

firewood回答回数4ベストアンサー獲得回数02005/06/12 23:59:34

ポイント70pt

URLはダミーです。

数MSということはタスク切替が起きているのではないでしょうか。

単純に、プロセッサのスケジュールをプログラム優先にしたら速くなったりしませんか?

id:takumitakumi

ありがとう御座います。

チェックしてみます。

2005/06/13 18:19:01
id:sho1008 No.6

sho1008回答回数23ベストアンサー獲得回数02005/06/29 01:14:13

ポイント70pt

URLダミーです。

既出ではありますが、IISのサービスは動いているのでしょうか?

以前、Win2Kと2000Serverにて同じような経験があります。

その際は別マシンでしたが2000Serverのマシンの方が

はるかに高スペックにも関わらず、同処理に時間がかかるという事象で、

IISサービスを停止したら解決しました。

id:takumitakumi

結局、HDをSCSI化したら、問題にならない程、高速になりました。

実は、本来の問題を追っている最中に、本問題にぶつかっていましたが、問題を起こしている実機が、

SCSIなので、実機と同じハードにしたら、あっさり本件はクリアしました。

ですが、裏に潜んでいた別の問題が顔を出してしまい、本件の回答が非常に遅れたことを、ご回答頂いた皆様に深くお詫びいたします。。。

ちなみに、本当の問題は、NTTネットワーク回線が帯域が細い上に、とある事情で帯域制限がかかり、

さらに帯域が細くなった結果、生まれたものと言うことが判明しました。

というわけで、大変申し訳ありませんでした。

またの機会に皆様のお知恵をお借りしたいと存じます。

どうもありがとうございました。

皆様、ありがとうございました。

2005/07/01 12:45:23

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません