ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 如何快速在树视图中显示大型XML文件(> 21MB)

2019-06-09 11:52:43  阅读:210  来源: 互联网

标签:c xml treeview xmlreader


我需要在C#Windows窗体应用程序的树视图控件中显示一个大型XML文件(> 21MB).我编写了适用于小型XML文件的代码,但是当我尝试打开一个大的XML文件(> 1 MB)时,它花费了太多时间.
 任何人都可以建议我如何优化这一点并建议我做出任何改变或替代方案.

以下是代码段:

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();
        }
    }

解决方法:

我会像这样包装你的代码:

XMLTreeView.BeginUpdate();
try
{
    CreateTreeViewFromATXML(strSrcFileName);
}
catch (Exception e)
{
    //Handle any error
}
finally
{
    XMLTreeView.EndUpdate();
}

如果你不在更新块中,它会在每个节点上重新绘制GUI,而且价格昂贵.你也可以在AddNode中进行递归,但如果XML没有太深入嵌套,那么它应该不是问题.

标签:c,xml,treeview,xmlreader
来源: https://codeday.me/bug/20190609/1204789.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有