Windowsには WinSATというシステムの評価ツールがあります。 標準のコマンドでディスクやメモリ、CPUやグラフィックなどの性能評価が行えます。
この WinSAT で表示されるディスクの性能評価を実際のファイルコピーと比較してみました。
コピー元内蔵SSDとコピー先USB2.0のメモリで試します。
1.管理者権限でコマンドプロンプトを起動します。
2.以下のコマンドでコピー元(Cドライブ)の内蔵SSDの性能をチェックします。
winsat disk -drive c
読み込み速度は 2220.066MB/s = 2328530780B/s (1M=1048576バイトで計算)
3.同様に、コピー先(Uドライブとした場合)のUSBメモリの性能をチェックします。
winsat disk -drive u
書き込み速度が 19.22MB/s = 20153630.72B/s (1M=1048576Bバイトで計算)
空き容量がないと書き込み評価は失敗します。
4.テスト用に 500,000,000バイトのファイルを作成
今回は以下のVBScriptでファイルを作成
Set FSOObj = CreateObject("Scripting.FileSystemObject")
Set objFile1 = FSOObj.CreateTextFile(".\500MB.txt", True)
objFile1.WriteLine(Space(499999998))
objFile1.Close
Msgbox "終了"
5.WinSAT で表示された速度から試算
読み込み 500,000,000 ÷ 2,328,530,780 = 0.214727675 秒
書き込み 500,000,000 ÷ 20,153,630.72 = 24.8094255 秒
合計して 25.23888085 、25.24秒くらいがディスクアクセスにかかる時間と試算
6.ファイルをコピーして時間を計測
以下のバッチファイルでコピーと時間の計測
@echo off
CD %~dp0
Set StartTime=%time%
copy 500MB.txt U:\
echo 終了: %time%
echo 開始: %StartTime%
Pause
27.11秒
試算した25.24秒とは1.87秒の差異。
この差異がCPUの処理時間等々だと思われます。
7.ファイル数が多いときのテストも実行
1,000,000バイトのファイルを500ファイル作成して1ファイルの時と合計が同じになるよう作成
以下のVBScriptでファイルを作成
Set FSOObj = CreateObject("Scripting.FileSystemObject")
Set objFile1 = FSOObj.CreateTextFile(".\1MB_001.txt", True)
objFile1.WriteLine(Space(999998))
objFile1.Close
For i = 2 To 500
FSOObj.CopyFile ".\1MB_001.txt", ".\1MB_" & Right("00" & CStr(i), 3) & ".txt", True
Next
Msgbox "終了"
8.ファイルをコピーして時間を計測
以下のバッチファイルでコピーと時間の計測
@echo off
CD %~dp0
Set StartTime=%time%
copy 1MB*.txt U:\
echo 終了: %time%
echo 開始: %StartTime%
Pause
45.83秒
試算した25.24秒とは20.57秒の差異。
ファイル数500で割ると、1ファイル 0.04114秒
約41ミリ秒がCPUの処理時間等(プロンプトにファイル名表示する時間なども)だと思われます。
コピー元内蔵SSDとコピー先USB3.0のメモリで試します。
同じ手順なので、要点のみ。
書き込み速度が 81.61MB/s = 85574287.36 B/s
読み込み 500,000,000 ÷ 2,328,530,780 = 0.214727675 秒
書き込み 500,000,000 ÷ 85,574,287.36 = 5.842876586 秒
合計して 6.272331936秒、6.27秒くらいがディスクアクセスにかかる時間
500×1をコピーすると 8.34秒、差異が2.07秒
1×500をコピーすると 30.78秒、差異を500で割ると 0.04902秒、49ミリ秒
以上のような結果になりました。
多少の誤差を考えると、十分に参考にできる値が返ってきていました。