最近我接受到一个工作任务,大致是做个通用的数据接口,供业务人员调用,要求返回前台所有的字段中文说明和字段对应的单位说明。
于是乎,我就定义了一个结构体:
public class FieldInfo
{
public string FieldCode = string.Empty;//数据库字段
public string FieldName = string.Empty;//字段对应的中文说明
public string FieldUnit = string.Empty;//字段对应的单位说明
}
然后,在定义一个List
List<FileInfo> FileInfoList = new List<FileInfo>();
把所有的字段,中文说明,单位添加进去,最后更具查询的结果去遍历这个List,获取对应的中文说明和单位说明。
某领导问我功能实现了吗?答:实现了,某领导问这么做了,把上面的叙述了一遍。
某领导开始发飙,你这么可以这样写,效率多低下啊,你应该用Dictionary<TKey, TValue>去做,这个查询效率高。
我当时心里就有抵触,你这样说话有依据吗?
可是没有办法,他是领导我先改,改好了我去测试测试到底哪个效率高。
下面说说实验的结构啊,在数据量少的情况下几乎看不出差异,到百万级数据才微微有些差异,于是我把数据加大到千万(亿的时候报内存溢出,不好测试了)
测试结果如下:
List<T> 添加千万数据大约需要3秒,而Dictionary<TKey, TValue> 大约需要9秒。
查询部分 List<T>用的是遍历查询,查询最中间的那个数据大约需要50ms
Dictionary<TKey, TValue> 用的是 Dictionary.ContainsKey(TKey) 大约为10ms
特别说明一下,在查询一个不存在的结果的时候 Dictionary表现优异一点 约为 1ms.
总结:
1. 技术上:如果使用频率不高,数据量不大,两者无明显查询。如果使用频率巨大,数据量也巨大,Dictionary前期组织数据需要浪费一点时间,可以在后期慢慢弥补回来。
2.某领导,我真的很想问候你的家人,不知道你的结论是怎么的出来的,也不知道我的结论有没有不合适的地方,希望大家指出。