日期:2014-05-17  浏览次数:21472 次

C# List<T>序列化/反序列化性能问题
System.Collections.Generic.List==>Array数组
System.Collections.Generic.LinkedList==>Link链表

访问方面前者优于后者,但序列化/反序列化又是怎样一种情况呢?

在不需要随机访问特定元素, 但需要遍历全部或部分元素的情况下该如何取舍?

望有经验的专家不吝赐教, 谢谢.

(为防止无尾贴,分数稍后追加)

------解决方案--------------------
说List是数组是不准确的。事实上,List内部使用了缓存。因此并非每次添加都会导致内存扩展操作。

从这个意义上说,担心List的性能基本没有必要。只有在很极端的情况下,才需要使用LinkedList。
------解决方案--------------------
访问方面前者优于后者
应该加一个前提:(通过下标)访问指定元素
如果需要全部遍历,效率就差不多了(后者相当遍历迭代器)
但是在插入和移除方面,随着长度的增长,后者的效率高得多,前者需要移动元素
------解决方案--------------------
随机访问
如果在意这点,又不考虑array 那果断就是list了啊,
list相比 LinkedList ,有索引,查询快 删除慢。

不过,其实也差不到哪去?
无所谓的,c#这方面,很少去优化,因为一般应用性能够了,极端应用,优化空间太少,别人根本就不会选用c#。
------解决方案--------------------
序列化/反序列化也是前者优于后者,对于后者,属性嵌套属性,这意味着顶级元素的完成要在所有子级完成后才能完成,因此会占用大量堆栈资源,甚至可能堆栈溢出。而对于前者,只是简单的循环遍历即可填充其中元素,操作简单效率高。