C# PLINQ内存列表查询优化历程
作者:网络转载 发布时间:[ 2016/3/30 10:52:48 ] 推荐标签:.NET 测试开发技术
产品中(基于ASP.NET MVC开发)需要经常对药品名称及名称拼音码进行下拉匹配及结果查询。为了加快查询的速度,所以我开始将其加入内存中(大约有六万五千条数据)。
下面附实体类。
public class drugInfo
{
public int drug_nameid { get; set; }
public string drug_name { get; set; }
public string drug_search_code { get; set; }
}
第一次做法:
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
key = key.ToLower();
var resultList = cacheList.Where(m => m.drug_name.ToLower().Contains(key) || m.drug_search_code.ToLower().Contains(key)).ToList();
stopWatch.Stop();
double eMseconds = Math.Max(0, stopWatch.Elapsed.TotalSeconds);
刷新页面几次,得到个平均用时约35MS左右。
第二次做法:
为了减少CPU的运算,我们将LINQ表达式中的转小写操作优化一下,先在缓存列表上做些动作,将名称和搜索码先转小写存储。
下面为改进过的实体类。
public class drugInfo
{
public int drug_nameid { get; set; }
public string drug_name { get; set; }
public string drug_search_code { get; set; }
public string lower_drug_name { get; set; }
public string lower_drug_search_code { get; set; }
}
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
key = key.ToLower();
var
resultList = cacheList.Where(m =>
m.lower_drug_name.Contains(key) ||
m.lower_drug_search_code.Contains(key)).ToList();
stopWatch.Stop();
double eMseconds = Math.Max(0, stopWatch.Elapsed.TotalSeconds);
ViewBag.useTime = string.Format("用时{0}秒rn", eMseconds);
刷新页面几次,得到个平均用时约16MS左右。
虽然这样做,内存列表中会多一些冗余数据,但是得到的性能提升有一倍了。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11