VBScriptでファイルを読み書きする場合、ADODB.StreamオブジェクトとFileSystemObjectオブジェクトが利用できます。これらのオブジェクトの使い方に関しては、インターネットで調べるとたくさんの情報を見つけることができます。しかしながら、両者の性能差については、情報がほとんどありません。
両者の間に、劇的な性能差があるとは思えませんが、ADODB.StreamオブジェクトとFileSystemObjectオブジェクトで、ファイルの読み書きにどれくらいの性能差があるのかを調べてみました。
計測条件
- 読み込みに利用するデータとして、青空文庫にある夏目漱石の夏目漱石 吾輩は猫である を利用しました。
上記の文章をテキストデータとして保存すると、行数にして2300行、ファイルサイズは721KBになります。このファイルを100回連続で読み込み・書き込みを行った場合の時間を計測します。
なお、VBScriptの処理時間の測定には、以下のスクリプトを利用しました。
測定した関数
- ADODB.Stream
- ReadText
- WriteText
- FileSystemObject
- ReadAll
- Write
測定結果(単位は秒)
読み込み | 書き込み | |
ADODB.Stream | 17.06 | 3.38 |
FileSystemObject | 7.06 | 2.73 |
結論的には、FileSystemObjectを利用したファイル読み書きのほうが高速です。今回の計測では、読み込み時の性能差は、2.4倍、書き込み時の性能差は、1.2倍となりました。
したがって、ANSIテキストの読み書きを利用する場合は、FileSystemObjectを利用し、UTF-8などFileSystemObjectでは対応できない文字コードのファイルを読み書きする場合には、ADODB.Streamを利用するというすみ分けを行ったほうが良いと言えます。