日期:2014-05-20  浏览次数:20684 次

linq to entity 与 entity sql 性能
一个是用linq to entity写的
一个是entity sql写的
性能杂差别老大呢

linq to entity
100000
00:00:00.8281250 
基本在0.8-1之间

entity sql
100000
00:00:00.3593750 
基本在0.3-0.5之间

都是加载10W条数据



               IEnumerable<HanModel.Models.ViewModel.Fs_NewsOrClass> query = (
                   db.fs_news.OrderByDescending(fn => fn.Click).Join(
                   db.fs_news_Class, fn => fn.ClassID, fc => fc.ClassID, (fn, fc) =>
                  new HanModel.Models.ViewModel.Fs_NewsOrClass
                       {
                           newsid = fn.Id,
                           newsTitle = fn.NewsTitle,
                           class_ename = fc.ClassEName,
                           class_type = fc.Type_New
                       })).Take(100000).ToList();
               return query;

===============================================================
               string sql = "select top 100000  fn.id,fn.newstitle,fc.classename,fc.type_new from fs_news as fn inner join fs_news_class as fc on fn.classid=fc.classid  order by fn.click desc";
               var cmd = db.Database.Connection.CreateCommand();
               db.Database.Connection.Open();
               cmd.CommandText = sql;
               List<HanModel.Models.ViewModel.Fs_NewsOrClass> fslist = new List<HanModel.Models.ViewModel.Fs_NewsOrClass>();
               using (var reader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess))
               {
                   while (reader.Read())
                   {
                       HanModel.Models.ViewModel.Fs_NewsOrClass fs = new HanModel.Models.ViewModel.Fs_NewsOrClass();
                       fs.newsid = Convert.ToInt32(reader["id"]);
                       fs.newsTitle = reader["newstitle"].ToString();
                       fs.class_ename = reader["classename"].ToString();
                       fs.class_type = reader["type_new"].ToString();
                       fslist.Add(fs);
                   }
                   reader.Close();

               }

               db.Database.Connection.Close();
               return fslist;


------解决方案--------------------
想快? 干吗不用PLINQ

昨天看了一老外的文章,他在文中提出这样一个理论: 现在的程序员根本就在浪费CPU,还处在只用单核CPU的代码思想中,殊不知现在很多客房端早已经进入了多核时代,未来多核也必是一个趋势,所以:
程序员们,尽可能多的在代码中"消费"你的客户端的硬件吧!