【问题标题】:.dat* filename handling in .Net and Windows.Net 和 Windows 中的 .dat* 文件名处理
【发布时间】:2013-09-09 23:50:32
【问题描述】:

在解决性能问题时,我在 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 有一个特殊的规则
  • 我检查了防病毒软件。我什至禁用了它,但这没有任何区别。
  • 澄清一下,它不会影响 .dat 仅作为扩展名,如果 .dat 位于文件名中的任何位置(例如 file.datacenter.txt),我会遇到同样的问题。

标签: c# .net windows


【解决方案1】:

如果一切都失败了,试试kludge:

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

【讨论】:

  • 由于重命名而增加的开销会出现同样的问题。在我有名称控制的地方,我现在只是避免使用 .dat*。但是,我担心其他一些标准扩展可能会受到影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2012-06-17
  • 2014-11-15
  • 2018-09-24
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多