【发布时间】:2015-05-15 04:18:22
【问题描述】:
我需要在 C# Windows 窗体应用程序的树视图控件中显示一个大型 XML 文件 (>21MB)。我已经编写了适用于小型 XML 文件的代码,但是当我试图打开一个 BIG XML 文件(> 1 MB)时,它花费了太多时间。 任何人都可以建议我如何优化这一点并建议我进行任何更改或替代方案来实现这一点。
下面是sn-p的代码:
private void CreateTreeViewFromATXML(string strSrcFileName)
{
XmlDataDocument xmldoc = new XmlDataDocument();
XmlNode xmlnode ;
FileStream fs = new FileStream(strSrcFileName, FileMode.Open, FileAccess.Read);
xmldoc.Load(fs);
xmlnode = xmldoc.ChildNodes[1];
XMLTreeView.Nodes.Clear();
XMLTreeView.Nodes.Add(new TreeNode(xmldoc.DocumentElement.Name));
TreeNode tNode ;
tNode = XMLTreeView.Nodes[0];
AddNode(xmlnode, tNode);
}
private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
{
//XmlNode xNode ;
TreeNode tNode ;
XmlNodeList nodeList ;
int i = 0;
if (inXmlNode.HasChildNodes)
{
nodeList = inXmlNode.ChildNodes;
foreach (XmlNode XNode in inXmlNode.ChildNodes)
{
tNode = new TreeNode(XNode.Name);
inTreeNode.Nodes.Add(tNode);
AddNode(XNode, tNode);
}
}
else
{
inTreeNode.Text = inXmlNode.InnerText.ToString();
}
}
【问题讨论】:
-
不是预先构建整个树视图,而是懒惰地构建它。当用户点击一个节点时,构建它的子节点。
-
我还会考虑使用工作线程/后台线程来解析和生成树节点,因为不希望像这样锁定处理大量数据的 UI 线程。