ファイルコピーとの果て無き(?)戦い
仲間うちでちょぼちょぼ要望があったファイルコピーツールを、やっぱりのそのそと作ってたりするワケですが。
メインとなるファイルコピーロジックを書き始めたら、これがまー、うまく行かないのなんのって。
いや、コピー自体は上手くいくようになったんだけど、性能がイマイチとゆーか。
VistaのExplorerのファイルコピーの性能に届かない・・・orz
まぁ、まずWin32APIの愚痴から行くと(をい)、Win32APIのWriteFile関数、書き込み先のファイルが配置してある場所によって、一気に書き込みできるバイト数が違うなんて話、今回初めて知ったぞごるぁ。
しかも書き込みできる量を書き込んで、これだけ書けた―って言って帰ってくるならまだしも、全失敗で帰ってくる。
で、だ。
対象のファイルに一気に書き込める最大サイズは、どーやって知りえたらいいのかな?開発者として?>MS
まぁ、それに加えて「一気に書き込むサイズ」も、性能も加味すると結構微妙なハナシがあって。
ローカルに接続されたハードディスク相手だと、100Mとか平気で一気書き出来て、今のところ性能も一番高い。
でも、ネットワークで共有された共有ドライブ相手だと、数M単位で書き込むと失敗するし、1Mと512Kでの書き込みで性能を比較すると、512Kの方が速かったりする(汗)
よーするに、書きこむ先のファイルの場所によって、一度に処理する最適なサイズが異なる(そして、そのサイズは今のところ不明)ってワケだ。
そして、困ったことに今現在性能の比較相手となっている、Vistaのエクスプローラのファイルコピーが、意外(といっちゃ失礼か)に速いって事。
ネットワーク相手の512K設定の時はなんとか互角って感じだけど、ローカルファイルだと全く太刀打ちできないっつーか、100M一気書きでも倍以上時間かかる・・・orz
しかも、エクスプローラは画面に進捗表示とかしてるのに対して、こっちは何もしてないにも関わらず、だったりして。
まぁ、こっちはC#(CLR)で書いてるってハンデは多少あるんだけど、API以外のロジック部の負荷が高いはずの512K単位の処理でネットワーク相手だと1Mより性能が上がったり、びすたんと互角の速度を出せるって事を考えると、ロジックまわりのオーバーヘッドは大差ないと思うんだよなー。
問題のツールは、コピー速度も結構求められてる気がするんだけど、これ完成すんのかねぇ?w
トラックバック URL :