HTML5技术

LINQ中那些你所不知道的秘密 - 我们的阳光很盐

字号+ 作者:H5之家 来源:博客园 2015-11-27 16:12 我要评论( )

一直对LINQ简洁高效的语法青睐有加,对于经常和资料库,SQL语法打交道的C#开发者来说,LINQ无疑是一个非常不错的选择,当要在ListT(T为一个普通对象)集合中查找满足某些条件的某个对象时,写成form t in T where t. Property1 == "A" t. Property2== "B" s

  一直对LINQ简洁高效的语法青睐有加,对于经常和资料库,SQL语法打交道的C#开发者来说,LINQ无疑是一个非常不错的选择,当要在List<T>(T为一个普通对象)集合中查找满足某些条件的某个对象时,写成 form t in T where t. Property1 == "A" && t. Property2== "B" …select t或者写成T.Where(t=>t. . Property1 == "A" && t. Property2== "B" …),是再自然不过的了。乍看之下,反正List<T>已被存在记忆体,无需顾忌反复查询所产生的连续成本,而且where条件也十分通俗易懂。但是当你需要频繁检索某个集合中的满足某些条件的对象时,比如需要求两个集合中的差集时,你有没有考虑过性能问题呢?最近的项目遇到频繁检索资料库,对比查询的多个对象的性能瓶颈问题,于是做了下面这个测试,下面我们来看一个对比测试:

LinqOrDictioanry 2 { GetLinqSingle(List<Model> model, string id, string sbName) 4 { 5 return model.Single(o => o.Id == id && o.SbName == sbName).JuName; 6 } GetDictionaryValue(Dictionary<string, Model> dictionaryModel, string id, string sbName) 8 { , id, sbName)].JuName; 10 } 11 }

 

1 [TestMethod] TestMethod1() 3 { 4 var model = new List<Model>(); count = 100000; 6 var time = 3; 7 var random = new Random(count); 8 for (var i = 0; i < count; i++) 9 { 10 model.Add(new Model() 11 { 12 Id = Guid.NewGuid().ToString(), + random.Next(0, 10000), + random.Next(0, 10000), + random.Next(0, 10000), + random.Next(0, 10000), + random.Next(0, 10000), 18 Time = DateTime.Now, 19 Total = random.Next(0, 10000) 20 }); 21 } , d.Id, d.SbName), d => d); toModel = new List<Model>(); 25 var tempCount = random.Next(500, 10000); 26 for (var i = 0; i < tempCount; i++) 27 { 28 var sample = model[random.Next(model.Count)]; 29 toModel.Add(new Model() 30 { 31 Id = sample.Id, 32 SbName = sample.SbName 33 }); 34 } , model.Count, tempCount); 36 for (var i = 0; i < time; i++) 37 { , i, tempCount); 39 var sw = new Stopwatch(); 40 sw.Start(); 41 for (var j = 0; j < tempCount; j++) 42 { 43 var model1 = toModel[j]; 44 model1.JuName = LinqOrDictioanry.GetLinqSingle(model, model1.Id, model1.SbName); 45 } 46 sw.Stop(); , sw.ElapsedMilliseconds); , toModel[1].JuName, toModel[tempCount / 2].JuName, toModel[tempCount - 1].JuName); 49 } 50 Console.WriteLine(""); 51 for (var i = 0; i < time; i++) 52 { , i, tempCount); 54 var sw = new Stopwatch(); 55 sw.Start(); 56 for (var j = 0; j < tempCount; j++) 57 { 58 var model1 = toModel[j]; 59 model1.JuName = LinqOrDictioanry.GetDictionaryValue(dictionary, model1.Id, model1.SbName); 60 } 61 sw.Stop(); , sw.ElapsedMilliseconds); , toModel[1].JuName, toModel[tempCount / 2].JuName, toModel[tempCount - 1].JuName); 64 } 65 }

View Code

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 这些年,我身边的那些人和事 - 左潇龙

    这些年,我身边的那些人和事 - 左潇龙

    2017-02-20 12:01

  • Microsoft Edge与Google Chrome那些不同的举止 - fyter

    Microsoft Edge与Google Chrome那些不同的举止 - fyter

    2017-01-16 12:00

  • sql的那些事(一) - Akon_Coder

    sql的那些事(一) - Akon_Coder

    2017-01-01 12:00

  • 救火队员的那些事(2) - CC

    救火队员的那些事(2) - CC

    2016-09-07 17:00

网友点评