請原諒我的英文不好。XmlReader(Stream(fileName) - > MemoryStream)比XmlReader(文件名)慢
我想讀取大型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文件的路徑。
與讀者一起工作:在兩種算法中是一樣的。
我的RAM的速度是:15GB /秒 我的SSD的速度是:150MB /秒
我認爲第一算法將是至少100個時間更快。但實際上,第二種算法更快。
第一算法持續時間:10500毫秒。
第二算法持續時間:9500毫秒。
爲什麼?是否因爲程序應該跨越第一個算法中的多個抽象層?
謝謝你的任何信息。
您沒有顯示足夠的關於基準測試的信息。一秒鐘或10%的差異很可能是JITter熱身。執行一個適當的基準,你可能會看到他們的表現平等。 – CodeCaster 2015-02-06 09:52:13
你在第一種情況下測量什麼? (它是否包括文件的讀取,或者不包括?)如果它包括讀取文件所花費的時間,爲什麼你會期望它「至少快100倍」? – 2015-02-06 09:52:22
@CodeCaster:var watch = Stopwatch.StartNew();算法之前 And: watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); 之後算法 – steacker 2015-02-06 09:56:54