XmlReader(Stream(fileName) - > MemoryStream)比XmlReader(fileName)慢

时间:2015-02-06 09:50:41

标签: c# performance stream xmlreader memorystream

请原谅我的坏英语。

我想阅读大型XML文件(> 2GB)。我看了几篇关于它的帖子,并想出使用XmlReader。

出于测试目的,我创建了一个500MB的XML并制作了两个代码:

第一个:

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文件的路径名称。

与读者合作:两种算法相同。

我的RAM速度是:15GB /秒 我的ssd的速度是:150MB /秒

我认为第一个算法将至少快100倍。但实际上,第二种算法更快。

第一个算法持续时间:10500毫秒。

第二算法持续时间:9500毫秒。

为什么?是因为程序应该在第一个算法中跨越几个抽象层吗?

感谢您提供任何信息。

1 个答案:

答案 0 :(得分:1)

XmlReader是一个仅向前阅读器,因此使用MemoryStream方法,您将完整地浏览整个文件两次。

即使第二次直接来自内存,你已经拥有了"磁盘"预缓冲时的惩罚,因此开销只是再次运行所有数据。