ページ 11

処理の速さについて

Posted: 2006年5月04日(木) 01:19
by ゲスト
同じ処理(例えばファイルの読み書き)を行うときに、
標準関数とWin32APIで、どちらを使用した方が高速に動作しますか?

Posted: 2006年5月04日(木) 02:05
by tak
たとえ標準関数といえど大抵は最終的に Windows API を呼び出すので処理速度に大差はないと思いますが、直接 WinAPI を叩いた方が余分な処理が入らない分だけ高速なのではないでしょうか。
念のため言っておきますが、ファイル入出力に限って言えば CPU が動作する速度からするとディスクアクセスは比べ物にならないぐらい低速なので、さきの僅かな時間差に囚われて WinAPI を呼び出すことは全く理に適っていません。(非同期 I/O やキャッシュ機構があれば話は別です。)

現実的にはどちらを利用してもたいして変わらないというのが僕の意見です。

Posted: 2006年5月05日(金) 15:56
by konisi
僕もtakさんとそんなに変わらない意見です。

DLLから関数を呼び出すのより標準関数から呼び出すほうがずっと処理が速いので、標準関数が現在のABコンパイラによって適度に最適化されていれば標準関数を使うほうが速いわけですが、他のところで無駄があればDLLの方が速い。

と言う事で標準関数を使うのとWin32APIを叩くのとどちらが速いかと言われればどちらとも取れません。ただ、takさんが言ったようにファイルの読み書きについて言えばそもそもハードディスクへアクセスするのに相当時間がかかるのであんまり変わらないと思います。

数式を弄る関数がDLLにあったとしたら、DLLから呼び出すのと同内容の自作関数を呼び出すのとではどちらが速いとは一概に言えません。
DLLの作者が相当なまでに速度に対して凝っていればDLLの方が速いことだってありえるわけで。