Oct 172010
NTFSファイルシステムで1フォルダに大量のファイルを書き込む場合、8.3形式ファイル名の生成がボトルネックになると聞いたので実験。
こちらの情報によると「300,000ファイル以上」との記述があるので、1フォルダに500,000ファイルを作成する場合の処理時間をWindows XPで測定してみる。8.3形式ファイル名の有効化、無効化には、fsutils behaviorコマンドを使う。
測定結果はこちら。
ファイル数 | 処理時間(秒) | |
---|---|---|
disable8dot3 = 0 | disable8dot3 = 1 | |
10000 | 7 | 5 |
20000 | 15 | 10 |
30000 | 49 | 16 |
40000 | 82 | 21 |
50000 | 286 | 26 |
60000 | 766 | 31 |
70000 | 1590 | 35 |
80000 | 2716 | 40 |
90000 | 4090 | 45 |
100000 | 5792 | 50 |
110000 | 6192 | 54 |
120000 | 6596 | 59 |
130000 | 8475 | 64 |
140000 | 10604 | 69 |
150000 | 13985 | 74 |
160000 | 18066 | 78 |
170000 | 22742 | 83 |
180000 | 27976 | 88 |
190000 | 33826 | 92 |
200000 | 97 | |
210000 | 103 | |
220000 | 108 | |
230000 | 113 | |
240000 | 118 | |
250000 | 122 | |
260000 | 128 | |
270000 | 132 | |
280000 | 138 | |
290000 | 142 | |
300000 | 146 | |
310000 | 151 | |
320000 | 156 | |
330000 | 161 | |
340000 | 166 | |
350000 | 170 | |
360000 | 176 | |
370000 | 180 | |
380000 | 186 | |
390000 | 193 | |
400000 | 198 | |
410000 | 204 | |
420000 | 208 | |
430000 | 213 | |
440000 | 218 | |
450000 | 223 | |
460000 | 229 | |
470000 | 233 | |
480000 | 238 | |
490000 | 243 | |
500000 | 248 |
8.3形式ファイル名が有効な状態では、190,000ファイル作成までにトータルで9時間以上を要する(途中で測定中止)。最初の10,000ファイルは7秒なのに、ファイル数が増えるに従い処理時間が増えて、180,000からの10,000ファイルでは97分という状態になる。
しかし8.3形式ファイル名を無効にした状態では、コンスタントに5秒前後で10,000ファイルを書き出すことができるようになった。
測定に使用したスクリプトはこちら。”TXT” + 6桁の数値 + “.txt”という形式でひたすらファイルを作成していく。
Option Explicit Dim fileObj Dim outFile Dim outCount, maxCount, repCount Dim startedTime, elapsedTime Dim fileName maxCount = 500000 repCount = 10000 Set fileObj = CreateObject("Scripting.FileSystemObject") startedTime = Now() For outCount = 1 To maxCount Step 1 fileName = "TXT" & Right("000000" & outCount,6) & ".txt" Set outFile = fileObj.CreateTextFile(fileName) outFile.Close() If (outCount Mod repCount) = 0 Then elapsedTime = DateDiff("s",startedTime,Now()) WScript.Echo outCount & "," &elapsedTime End If Set outFile = Nothing Next Set fileObj = Nothing
Sorry, the comment form is closed at this time.