在对性能问题进行故障排除时,我在 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 文件的大容量应用程序出现问题。
它可能在我的电脑上,但我检查了 Windows 注册表并没有发现异常的扩展设置。