1

パフォーマンスの問題をトラブルシューティングしているときに、.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 レジストリを確認したところ、異常な拡張機能の設定は見つかりませんでした。

4

1 に答える 1

1

他のすべてが失敗した場合は、クラッジを試してください。

すべてのファイルを .txt として書き出し、*.txt の名前を .dat に変更します。多分それはより速くなるでしょう:)

于 2013-09-10T00:06:18.157 に答える