.dat* .Net 和 Windows 中的文件名处理

本文关键字:文件名 处理 Windows Net dat | 更新日期: 2023-09-27 18:30:40

在解决性能问题时,我在Windows 8中遇到了一个与包含.dat的文件名有关的问题(例如file.dat,file.data.txt)。

我发现创建它们所需的时间是具有任何其他扩展名的任何文件的 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注册表,没有发现异常的扩展设置。

.dat* .Net 和 Windows 中的文件名处理

如果所有其他方法都失败了,请尝试一个 kludge:

将所有文件写出为.txt,然后将 *.txt 重命名为 .dat。 也许会更快:)