パフォーマンスの問題をトラブルシューティングしているときに、.dat を含むファイル名 (file.dat、file.data.txt など) に関連する Windows 8 の問題に遭遇しました。
それらを作成するには、他の拡張子を持つファイルの 6 倍以上の時間がかかることがわかりました。
Windows エクスプローラーでも同じ問題が発生し、.dat* ファイルを含むフォルダーをコピーするときに非常に長い時間がかかります。
この問題を説明するために、いくつかのサンプル コードを作成しました。
internal class DatExtnIssue
{
internal static void Run()
{
CreateFiles("txt");
CreateFiles("dat");
CreateFiles("dat2");
CreateFiles("doc");
}
internal static void CreateFiles(string extension)
{
var folder = Path.Combine(@"c:\temp\FileTests", extension);
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);
var sw = new Stopwatch();
sw.Start();
for (var n = 0; n < 500; n++)
{
var fileName = Path.Combine(folder, string.Format("File-{0:0000}.{1}", n, extension));
using (var fileStream = File.Create(fileName))
{
// Left empty to show the problem is due to creation alone
// Same issue occurs regardless of writing, closing or flushing
}
}
sw.Stop();
Console.WriteLine(".{0} = {1,6:0.000}secs", extension, sw.ElapsedMilliseconds/1000.0);
}
}
次の拡張子を持つ 500 個のファイルを作成した結果
.txt = 0.847secs
.dat = 5.200secs
.dat2 = 5.493secs
.doc = 0.806secs
以下を使用して同様の結果が得られました。
using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{ }
と:
File.WriteAllText(fileName, "a");
実行に時間がかかりすぎるバッチアプリケーションがあったため、これが問題を引き起こしました。最終的にここまでたどり着きました。
なぜこれが起こるのか誰にも分かりますか?これは設計によるものですか?.dat ファイルを作成する大量のアプリケーションで問題が発生する可能性があるため、そうしないことを願っています。
これは私の PC に原因がある可能性がありますが、Windows レジストリを確認したところ、異常な拡張機能の設定は見つかりませんでした。