Linq To XML:论XStreamingElement与XElement的不同

9 篇文章 0 订阅
5 篇文章 0 订阅

XStreamingElement 从名字上面,已经能看出它是使用流的模式来创建Element

看到它的MSDN在线文档(http://msdn.microsoft.com/zh-cn/library/system.xml.linq.xstreamingelement(v=vs.95).aspx#Y200)

是这么解释的

XElement 在操作结点时,是把变量加到结点上,而XStreamingElement则是把变量内存地址加到结点上

变量自身的内存占用和变量地址的内存占用显然有比较大的差距,而这也直接影响着性能,这些步骤在循环中发生,结点的个数也

直接拉开内存占用大小的距离。所以XStreamingElement比较适合创建比较大的XML文件

另一个特征就是XStreaming的延迟查询能力,序列化发生的次数只有一次,也就是最后循环执行完毕以后才发生!

下面以一个例子来说明他们之间的区别

以下例子来自英文版电子书

Pro LINQ: Language Integrated Query in C# 2010

第246页

XElement

[c-sharp] view plain copy print ?
  1. string[] names = { "John", "Paul", "George", "Pete" };
  2. XElement xNames = new XElement("Beatles",
  3. from n in names
  4. select new XElement("Name", n));
  5. names[3] = "Ringo";
  6. Console.WriteLine(xNames);

输出

[c-sharp] view plain copy print ?
  1. <Beatles>
  2. <Name>John</Name>
  3. <Name>Paul</Name>
  4. <Name>George</Name>
  5. <Name>Pete</Name>
  6. </Beatles>

结果看到,第三个元素并没有变成"Ringo",因为它在循环时就在创建XML树了,故之后无论怎么修改那个数组

都跟该XML树无关

XStreamingElement

[c-sharp] view plain copy print ?
  1. string[] names = { "John", "Paul", "George", "Pete" };
  2. XStreamingElement xNames =
  3. new XStreamingElement("Beatles",
  4. from n in names
  5. select new XStreamingElement("Name", n));
  6. names[3] = "Ringo";
  7. Console.WriteLine(xNames);

输出

[c-sharp] view plain copy print ?
  1. <Beatles>
  2. <Name>John</Name>
  3. <Name>Paul</Name>
  4. <Name>George</Name>
  5. <Name>Ringo</Name>
  6. </Beatles>

从结果已经可以看出XStreamingElement是怎么工作的了,在Console.WriteLine(xNames);这一行

XML树才真正被创建,故在这一行代码执行之前,对数组的任何改变都是有效的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值