技术点总结

1.(1)OLTP,基于SQL语句的数据源,利用关系型数据库为报表提供数据。(2)OLAP,基于数据仓库的数据源,利用多维数据集为报表提供数据。数据库

2.DIctionary数组

  SortDictionary:按key进行排序,若是使用排序数据一次性填充列表,则 SortedList 比 SortedDictionary 快。安全

  SortedList:按key进行排序,SortedList 使用的内存比 SortedDictionary 少,SortedDictionary 可对未排序的数据执行更快的插入和移除操做,它的运算复杂度为 O(log n),而 SortedList 的运算复杂度为 O(n)。服务器

  HashTable:用于处理key/value的键值对,散列表,适合存储数据类型不惟一,默认的 Hashtable 容许单线程写入, 多线程读取, 多线程

  DIctionary:单线程程序中推荐使用 Dictionary, 有泛型优点, 且读取速度较快, 容量利用更充分函数

  ListDictionary:与HashTable相似,使用单向连接的表。 对于一般包含少于 10 项的集合,建议使用该实现方法性能

Setui

  HashSet<T>:这个集合类包含不重复项的无序列表,基于散列值,插入元素的操做很是快,不须要像List<T>类那样重排集合;spa

  SortedSet<T>:有序无重复元素;线程

List

  List:数组链表,访问快复杂度O(1),可是添加删除复杂度O(n);

  LinkedList:指针链表(双向链表),访问复杂度是O(n),可是添加删除很快O(1)

4.lazy

  lazy<T>:实现的就是按“需”建立,而不是按时建立,第一次执行lazy<T>.value的加载,多线程下,仅会执行一次实例化,默认线程安全

5. ToLookup() 是一个奇妙的函数,用于对一个集合进行操做,建立一个1:n 的映射。 它能够方便的将数据分类成组,并生成一个字典供查询使用

7. Dispose和Finalize

     Finalize的目的是用于释放非托管的资源,而Dispose是用于释放全部资源,包括托管的和非托管的。

 8.Tuple

9. AsEnumerable() 、AsQueryable 和 .ToList() 的区别:

  • .AsEnumerable()延迟执行,不会当即执行。当你调用.AsEnumerable()的时候,实际上什么都没有发生。
  • .ToList()当即执行
  • 当你须要操做结果的时候,用.ToList(),不然,若是仅仅是用来查询不须要进一步使用结果集,并能够延迟执行,就用.AsEnumerable()/IEnumerable /IQueryable
  • .AsEnumerable()虽然延迟执行,但仍是访问数据库,而.ToList()直接取得结果放在内存中。好比咱们须要显示两个部门的员工时,部门能够先取出放置在List中,而后再依次取出各个部门的员工,这时访问的效率要高一些,由于不须要每次都访问数据库去取出部门。
  • IQueryable实现了IEnumberable接口。但IEnumerable<T> 换成IQueryable<T>后速度提升不少。缘由:
  • IQueryable接口与IEnumberable接口的区别:  IEnumerable<T> 泛型类在调用本身的SKip 和 Take 等扩展方法以前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句以后再向SQL服务器发送命令,它并非把全部数据都加载到内存里来才进行条件过滤。
  • IEnumerable跑的是Linq to Object,强制从数据库中读取全部数据到内存先

 10.多线程安全集合:

ConcurrentQueue(T)
ConcurrentStack(T)
ConcurrentDictionary(TKey, TValue)
ConcurrentBag(T)
BlockingCollection(T):线程安全的生产消费
IProducerConsumerCollection<T>

 

推荐使用场景

 

集合

顺序排列

连顺存储

直接访问方式

访问时间

操做时间

备注

Dictionary

 

Key

Key:

O(1)

 

O(1)

访问性能最快,不支持排序

SortedDinctionary

顺序排列

Key

Key: 
O(log n)

O(log n)

快速访问和支持排序的折衷

SortedList

顺序排列

Key

Key:

O(log n)

 

O(n)

和SortedDictionary类似,只是内部用数据替代树做为存储结构。

List

使用者能够精确控制元素的位置

Index

Index: O(1)

Value: O(n)

 

O(n)

最适合须要直接访问每个元素的少许集合。

LinkedList

使用者能够精确控制元素的位置

不支持

Value:

O(n)

 

O(1)

最适合不须要直接访问单个元素,可是在集合中添加/移除很是频繁的场景。

HashSet

不支持

Key

Key:

O(1)

 

O(1)

能保持元素惟一性的集合。不支持排序

SortedSet

顺序排列

Key

Key:

O(log n)

 

O(log n)

能保持元素惟一性而且支持排序。

Stack

LIFO

只能获取顶部元素

Top: O(1)

O(1)

 

Queue

FIFO

只能获底部元素

Front: O(1)

O(1)

相关文章
相关标签/搜索