我在WinForms中編寫了一個類來從XML文件中檢索一些數據。我的XML文件大多數都在5到10MB左右。我對代碼的性能不滿意,因爲它有時需要永久處理!所以我想讓你檢查我的代碼,如果我錯了,請糾正我。XML閱讀中的XPath性能
下面的代碼是它加載一組點的用於繪製曲線這個類的一個示例:
class TestXML
{
// Class initializings
XmlDocument ztr = new XmlDocument();
XPathDocument doc;
XPathNavigator nav;
XmlNamespaceManager ns;
string filePath;
public TestXML(string pathToFile)
{
this.filePath = pathToFile;
ztr.Load(filePath);
doc = new XPathDocument(filePath);
nav = doc.CreateNavigator();
ns = new XmlNamespaceManager(nav.NameTable);
}
public double[,] GetCurveDataPost(string testType, string groupName, string subTestType, string pinName, string testNameContains = "Post VI")
{
List<double> voltage = new List<double>();
List<double> current = new List<double>();
XPathNodeIterator volt = nav.Select("/Document/Tests/Test[contains(Name, '" + testNameContains + "') and Type='" + testType + "']/Groups/Group[Name='" + groupName + "']/CurvesFileData/Pins/Pin[Number='" + pinName + "']/Curves//Curve/VIPairs/VIPair/Voltage");
XPathNodeIterator curr = nav.Select("/Document/Tests/Test[contains(Name, '" + testNameContains + "') and Type='" + testType + "']/Groups/Group[Name='" + groupName + "']/CurvesFileData/Pins/Pin[Number='" + pinName + "']/Curves//Curve/VIPairs/VIPair/Current");
foreach (XPathNavigator value in volt)
{
voltage.Add(Convert.ToDouble(value.Value));
}
foreach (XPathNavigator value in curr)
{
current.Add(Convert.ToDouble(value.Value));
}
double[,] data = new double[voltage.Count(), 2];
for (int i = 0; i < voltage.Count(); i++)
{
data[i, 0] = voltage[i];
data[i, 1] = current[i];
}
return data;
}
}
我可以使用一個TreeView內這個類(例如加載多個XML文件,並且每個名稱屬性的節點將成爲XML文件的路徑)。但它並不總是有效。有沒有解決方法使其更快?它可能是像先加載內存中的XML文件,然後做操作?但這會導致高內存依賴性。
請讓我知道如果你需要更多的信息。