• 技术点总结


    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 项的集合,建议使用该实现方法

    Set

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

      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)

  • 相关阅读:
    计算2*3+(2*(5+6)*3)/2+4*6的值
    单链表 删除倒数第m个元素的实现
    string.data()和string.c_str()
    c++ 打印时间
    二分查找
    两个整数相除的计算
    查看一个数字是不是回环数(对称)
    编译#include <stdio.h> 等用尖括号指定的文件提示找不到 VS googleTest 安装的makeInstall
    八皇后---递归
    分治算法--求m的n次方
  • 原文地址:https://www.cnblogs.com/yy1234/p/7344590.html
Copyright © 2020-2023  润新知