【发布时间】:2015-04-06 10:15:10
【问题描述】:
请原谅我的英语不好。
我想读取大型 XML 文件 (> 2GB)。我看了几篇关于它的帖子,并想出使用 XmlReader。
出于测试目的,我创建了一个 500MB 的 XML 并制作了 2 个代码:
第一个:
MemoryStream mem = new MemoryStream();
Stream file = File.OpenRead(ofd.FileName);
file.CopyTo(mem);
mem.Position = 0;
file.Close();
XmlReader reader = XmlReader.Create(mem);
// work with reader
第二个:
XmlReader reader = XmlReader.Create(ofd.FileName);
// work with reader
ofd.FileName : xml文件的路径名。
使用阅读器:在两种算法中是相同的。
我的内存速度是:15GB/秒 我的ssd的速度是:150MB/秒
我认为第一个算法至少会快 100 倍。但实际上,第二种算法更快。
第一个算法持续时间:10500 毫秒。
第二次算法持续时间:9500 毫秒。
为什么?是不是因为程序在第一个算法中要跨越几个抽象层?
感谢您提供任何信息。
【问题讨论】:
-
您没有显示足够的关于如何进行基准测试的信息。一秒或 10% 的差异很可能是 JITter 预热。执行适当的基准测试,您可能会看到它们的性能相同。
-
你在第一种情况下测量什么? (是否包括读取文件?)如果它包括读取文件所用的时间,为什么会期望它“至少快 100 倍”?
-
@CodeCaster : var watch = Stopwatch.StartNew();在算法之前和:watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds);算法后
-
这将与获取 128kbps mp3 文件并以 320kpbs 重新编码的方式完全相同明显提高声音质量。
-
我认为它会更快,因为在第一种情况下:我们读取内存中的所有文件并且我们使用内存。而不是第二种情况,我们每次使用 xmlreader 时都访问 xml 文件。
标签: c# performance stream xmlreader memorystream