zoukankan      html  css  js  c++  java
  • 使用linq to xml 怎么减小内存消耗

             需要注意的一点是.net  framework3.5中提供的Linq to Xml是“内存”的处理方式,所以有多少节点,就要消耗多少内存,如果这个xml很大,也就是如果有1000级的目录嵌套,每级有100个子目录,那么就有100^1000个XElement在内存中创建出来,好吧,这么计算一下,整个过程需要多少内存吧,10的2000次方*每一个XElement消耗的内存,就算只有1个Byte,1G内存也只能处理10的30次方,所以要处理完这个场景,说需要的多少内存可以说是不可能达到的。但系统内存却有限的情况下怎么办哪?

            下面介绍一种方式:

    System.xml.linq 中提供的一个类(流) XSteamingElement类,即:表示延迟流输出的 XML 树中的元素,这个类如果从输入源(如文本文件)进行流式处理,则可以读取非常大的文本文件,并生成非常大的 XML 文档,同时保持较小的内存需求量,这个类正是我们所要找的。

           实例:

     读取C盘所有的文件夹及文件
    public static XStreamingElement GetFolderContent(DirectoryInfo di)
    {
    return new XStreamingElement("folder",
    new XAttribute("name", di.Name),
    from subDir in di.GetDirectories()
    select GetFolderContent(subDir),
    from file in di.GetFiles()
    select new XElement("file", new XAttribute("name", file.Name)));
    }
    //读取C盘所有的文件夹及文件
    var di = new DirectoryInfo(@"C:\");
    GetFolderContent(di).Save(@"d:\Folder.xml");
    注意:这里必须要用XStreamingElement的Save方法,否则延迟求解的特性可能会失效。

            以上仅供参考,如有错误之处,请大家提出,大家一起讨论.

  • 相关阅读:
    比尔盖茨,乔布斯,扎克伯格,Linus 等巨佬的办公桌
    快速从 Windows 切换到 Linux 环境
    海外开发者账号上架总结
    Chrome 浏览器对标签进行整理和分组的功能太棒了!
    最受嵌入式软件工程师青睐的系统
    我最喜欢的云 IDE 有哪些?
    前端zip包下载
    el-upload上传组件(隐藏上传按钮/隐藏文件删除标记)
    滚动条样式
    使用ul标签制作简单的菜单(vue模板)
  • 原文地址:https://www.cnblogs.com/wang726zq/p/2422034.html
Copyright © 2011-2022 走看看