hashset 检索复杂度O(1),你现在这个是O(n)
这么写的话,能快就有鬼了。
忘记说明了:数据是存在文本文件里的,初始化时逐行读取放入集合;每行就一个词。
@如露如电如梦如幻: 纯粹代码的优化通常只是同样数量级的速度变化,
如果你有场景,比如我假设一个场景吧,
读取一次文件(TXT),查询是几十万次,需要加快查询速度。
那么解决方案就是,
1、读取可以慢点没有关系,慢10倍都行。但是查询要快。
2、在查询中,进行计算会拖慢速度,所以查询时尽量简单
3、增加一个字段,在读取数据的时候,计算字符串长度,保存在字段WordLength里面
4、查询效果
var wordModel = words.Where(m => m.Word == strTemp).OrderByDescending(m => m.WordLength).FirstOrDefault();
内存都要爆炸了吧
忘记说明了:数据是存在文本文件里的,初始化时逐行读取放入集合;每行就一个词。
你这情况和什么集合类型都没关系.和索引有关.
你没有索引.他自然只能遍历.
如果写linq的人不是傻的.那你可以先排序再查询.能提高每次查询的性能.
比如words=words.OrderBy(m=>m.Word).ThenByDescending(m => m.Word.Length);
然后再var wordModel = words.Where(m => m.Word == strTemp).OrderByDescending(m => m.Word.Length).FirstOrDefault();效率就会高一些.
如果linq默认没对以排序集合做查询优化.那你就自己写个折半查找
刚才按你说的试了一把,被你说中了:linq没有对已排序集合做查询优化。
这么做了反而更慢。
@如露如电如梦如幻: 我上面的代码有问题.不能words=words.
得要var odwords=words. 弄一个新的.这样他的,类型才是已排序集合.
@吴瑞祥: 刚才1400毫秒左右,现在400毫秒左右。
但是还是不如啥也没干的快,240毫秒左右。
@如露如电如梦如幻: 这个是肯定的.他这个是第一次会慢.因为要排序.后面你再查询就会变快.
没有重复的话,一次只查询一条,用字典类Dictionary合适一点