实体框架 (EF) 入门 => 六、性能注意事项_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 实体框架 (EF) 入门 => 六、性能注意事项

实体框架 (EF) 入门 => 六、性能注意事项

 2014/5/19 3:28:23  秋意了了  博客园  我要评论(0)
  • 摘要:这个还真是复杂,看了看微软的文档,有些根本就看不懂,有些能看懂,但对我这种菜鸟也不会去用。无从下手啊,前面放了几个链接,挨个试试吧。一、显式打开连接这个我测试过,有些时候,需要我们显示打开连接,有时不用。1、.SaveChanges()没写错吧,嘿嘿。这个不需要关注连接的问题,因为不管之前你无论是修改、删除、新增,只有一个SaveChanges(),一定是只用一个链接,并且系统还会自动使用事务。2、查询增删改一个SaveChanges()就搞定了,可查询不是。同时需要查询多个数据的情况并不少见
  • 标签:注意事项 事项

这个还真是复杂,看了看微软的文档,有些根本就看不懂,有些能看懂,但对我这种菜鸟也不会去用。

无从下手啊,前面放了几个链接,挨个试试吧。

一、显式打开连接

这个我测试过,有些时候,需要我们显示打开连接,有时不用。

1、.SaveChanges()

没写错吧,嘿嘿。

这个不需要关注连接的问题,因为不管之前你无论是修改、删除、新增,只有一个SaveChanges(),一定是只用一个链接,并且系统还会自动使用事务。

2、查询

增删改一个SaveChanges()就搞定了,可查询不是。

同时需要查询多个数据的情况并不少见,比如EasyUI 的 DataGrid,它不仅要使用数据,还需要总行数,这时,就是两个查询,两个查询你虽然可以挨着写,可实际情况却是:

打开连接

查询

关闭连接

打开连接

查询

关闭连接

具体这样影响多大性能不清楚,连接虽然在连接池中,但打开一次,应该是建立一次TCP连接,总要消耗一些性能。

针对这种情况,就可以显示打开连接了:

使用using或try,毕竟涉及到连接了吗,总要将它关闭,然后:

.Open()

查询

查询

.Close()或.Dis…()

二、延迟加载

不要使用延迟加载,要一次把需要的数据读取出来。特别是在循环中使用延迟加载,每次都读取一次数据库,对性能影响非常大。

有主外键关系的使用.Include,没有的使用.Join。

三、尽可能的使用.Select

记得以前学数据库时,老师总是讲,用什么字段select什么字段,我想,这里应该也是一样,仅查询需要的字段,查询的字段少,在数据库执行查询时应该快一点,EF中应该也一样吧,字段少需要赋值的东西就少,应该也会快。

至于select到新的实体类,还是到var,应该看复用程度和与其它功能(比如界面生成)的相关程度,如果仅用一次,var就很好。

当然,如果需要传递,就不能使用var,要使用 dynamic。

四、应用服务器查询还是数据库服务器查询

直白点也就是先.ToList()还是后.ToList(),让然这里只是举例,只是想说明.ToList()才会到数据库查询,有些情况下并不需要.ToList()。

这个个人认为还是应该在数据库服务器查询,比较好规范开发人员行为,因为有些数据量比较大,你不能都查询到应用服务器在select/where吧,这样可能性能更差。如果你应用服务器比较空闲,可以移到数据库中一个吗。当然有些老的应用,架子搭在那了,就需要视情况而定了。

用别人的文章来说明这个问题:

http://www.cnblogs.com/jake1/archive/2013/04/25/3043664.html

  1. 分页的时候,尽量在数据库里面去分页.在我实际中的项目,我就发现我同事由于他不了解EF属性,它的分页都是做在内存中分页.下面请看他的代码.

         queryToList().Skip((pageInfo.PageIndex - 1) * pageInfo.PageSize).Take(pageInfo.PageSize);

         像上面的语句,他会先把数据从数据库中查出来,然后才分页.

          正确的写法应如下:

       query.Skip((pageInfo.PageIndex - 1) * pageInfo.PageSize).Take(pageInfo.PageSize).ToList();这样才会在数据库中分页.

上面这个示例非常典型,无论怎样,分页都应该在数据库中,你把很多数据都读取到应用服务器的内存中再取其中的10条记录,真是有点小题大做了。

五、太复杂的查询使用存储过程

如果涉及多个表的关联,最好使用存储过程。EF虽然也能实现,但其生成的sql恐怕和预想的要差很远。

六、主外键

能使用主外键的,尽可能的使用主外键,这样无论是EF还是数据库,性能都会有所提高。当然太复杂的还是应该使用存储过程。

七、预生成视图

这个操作还很麻烦,当然只是第一次访问时会影响性能,对一些访问量不大的,不用也罢,毕竟你发布上去之后,有可能第一次访问的就是你自己。

八、NoTracking

image

这个按微软说性能影响不大,多数情况下我们也不需要它跟踪,所以,加上算了。

九、using

image

十、Exists

在博客中看到的,感觉很有用

http://www.cnblogs.com/lori/p/3457430.html

EF架构~在ef中支持IQueryable级别的Contains被翻译成了Exists,性能可以接受!

回到目录

Entityframeworks很聪明

不错,非常不错!ef里的contains比linq to sql里的contains有了明显的提升,事实上,是在进行SQL语句翻译上有所提升,在linq to sql里不支持iqueryable的contains集合,它只支持本地集合进行contains,而本地集合的contains会被.net翻译成sql语句是where in (...),即集合有多个元素,在in里就会被列举多少次,这个在性能上是非常低下的,不提倡的,而且它还有长度限制最多本地集合在linq to sql里是2000多个元素。

ef在这点上表示不错,它为了防止你使用低下的查询,它杜绝你在linq语句中去ToList()对象,这是不错的选择,对于EF中的contains的用法,我们一般是分两步,第一查询出要列举的结果集,但不要ToList(),第二是使用contains语句,当EF把它发到SQL端时,这个语句被翻译成了exist,我们知道,这种查询的性能一定是比where in强的,不说SQL本身就说网络传输,它也一定比前者省了不少,呵呵。

Entityframeworks中正确使用Contains语句的Demo

错误

   var linq = (from data1 in GetUser().Where(i => i.UserID <= 50) select data1.UserID).ToList();

   var linq2 = GetUser_StudyRecord().Where(i => linq.Contains(i.UserID.Value)).ToList();

SQL语句截图

VNCOHWcAeCshqpcpZypGDroN0J/L9nvfQZn1lUG/S2XUi2mjSCfH/SK2hAoacSbzARyTENXL6tMX9a79Ki8ma3RZfP8puunSfjrbFY1poyvH29dRQSPOZD6AYxKFeplpz0uucnS9rm7SLLPOZvVXyH11v+rhrnmWnovq0f/FtMcSDcvo7l8zPwkxZUZ+jwoacQaAQxCNeplmT39QurXBorNltXlU96sbq/3LNS8uZ3H5uF3yWxcNPT62GGo9mye++3cMYYGtVNCIMwDsnjjUyyz2SF//28rVGNdq87jul352uy6wxEmkZZcPLPa4vz3UPVtUvhQNF/8Z+W0qaMQZAI5AdOpl3X/td0OkWgnS9TZvRjacuuZF9bilSXaVKmDL00VnDHv1Z2ctUmb+Oy9WUUGLLs6oqQEchzDVy9ov+1JNo9qjVQNJU9cqNYTVZm3VyvKZKi+uXVHVL4jeLvmtHlRfHLXH0Dq6e/3pnKXyculKKmjEGTU1gCPCSfbF6afjDeyJ6CT7vuKMmhrAgUC9DAAA4oKab9d+zYNoAAAMgHrZrv2aB9EAABggQPUyc1eOvz0jWlYOva6JOlv+fi2gMRZQNAAAliFE9TL7+eUlWEyvy8+vRTTGgokGAMBCBKle1u/6c9nzMrWv/BSzTAvVVh+FSIQ4JUnzp3aaW/F0JY2xUKIBALAQQaqXyaOfNAUZ44yzeth5RDHLYaH8Tqv60f/prLrW0RgLJBoAAEsRpHqZPH2XWVpaVax07SvL6D7aIsY79d/bP+sz1zYNrVG/ltIYCyMaAACLEaR6mVLlaHWGw2Dr6AvN9c7fwVlHY+yA0UAJDADeSYDqZfb9qIaqlqp99Xj5KGY9LXpdaqtaG+yciSQReZEOaWitozF20GigBAYA7yPak+z70r5alqNHAyUwAHgrqJcBAEBcRFvzbW/zPOLxFADgTaBetpnN84jHUwCANxG6etmossz1bPsluQMqk+3XUwCAfRG8etmAzW3beo/+4ZXJ9uopAMDOCFS9TLXZqrzVFkwn4VYkOYAy2f49BQDYGYGql+k2G6P3mebgymS79xQAYG+ErF4m2WyMruihHF6ZbMeeAgDsjsDVy1qbjdH7SqjMkp/IB7tRJtuFp6iOAcARCF29zD16+7FzlgahTLYPT1EdA4D9w0n2zWyex549RXUMAA4B6mUAABAX1Hz7IJ5KcZfxAYCoiEm9bIFT29t7Og/iAwDQEaB62esplQitzepJbck7dw1xS20uGz3Pxub7GppnQccHAGCcENXLqlz0m0WlY4iW8xLDGMcNXT3PwRqxVTTPAo4PAIAHAaqX3S8n+ww+pNfVNKyLp3bKbmb27pPWnruyWPK0c7A9aeDp+yqaZyHHBwDAgwDVy5zVxvDZ7a5ekeW+0vzuVO1qW/Unx0/2s+T+vq+ieRZwfAAAfAhQvWzmzG4dNz2JRJZ+1ntWqhxD66Sf2T19X0XzLNz4AAB4EaJ6mVRnKGuTozVNZ2HTW2NeP32bPVtrGqE0n+D7OppnYcQHpTQAmEuA6mUvY23pJe+BVHczymN1rep5vP5A/WMF3cfMnt1jnYRIxOXD03fdU53FNM+CiQ9KaQAwD06y7wNOsk+MD0ppADAb1MsAACAuqPn2ClXgziIGAMEQk3rZIdlUz+yQsP8TAEYIUL3M32Y77QnrmV4oJzpGjtl5sIaeWWQRA4DYCVG9TDmJcVZFQLxQjopP9aI++1GfB1hAA3oVPbOoIgYA0ROgepk5j9cJVVzKQvRVhXv//Um0x9Q0nS35M01p4uGFOfr9ckrSc6YtSqkR8/V9CT2zuCIGANEToHqZZLP07K7KhfwkzTxhLYtyuU5YWxS8vLxohmilAF7PMpMSg6Zxo8vlvF/PLKqIAQAEqF5mU5CRdE+ej5dVVUvRQ3HM4/ZfM/DxosxEXlxLi4X16JaI+fi+jJ5ZTBEDAAhSvcxjHh+sYLrywtDZsih4+Xqh/o5Bv9B1S/VvBhN8X0rPLNSIoXAGADYCVC8zt8n03QqLa8aq1TlLmzc1nS25laV/5TmhXofdr6WSacRJOFat1H2Sa+iZBRwxFM4AwIST7O+nyoW6C6PdwTG4hTLmk+wLRQyFMwCwgnoZAADEBTXfAqPP44g2AwAEAOplC4w+jyPaDAAQAMGql5lrQv05a2sPqcvB9fTDVrQZACBeglQvsx0XG8fVah39sHVtBgCImCDVyyz5oDW7+afFnraV9sm19MPWtRkAIGKCVC9zVEJKz6Y9dSvzfPQ6+mGr2gwAEDNBqpf5ZRHdno8iPQnLrsh19MPWtBkAIGqCVC+TskhV3iprz7Ys0v7ggGrAOvphb7MZBS8AAJVg1cvk0V/yfsumhNXtqT9QCzGrBqynH/Ymm1HwAgCQ4ST7AqPPYx2bUfACANBAvQwAAOKCmm8fHLG+DCg+ABAVqJftiiMqpYUQHwCIimDVy7TdIvPo95hIvs/wVOtHtnDCPtL6AwsppQUaHwCAcUJXL7OckZiI3sM8T13nEz4KMUV7ZXGltMDiAwDgQaDqZd3BAuP3u43fEx+pZRV7xj39KEQixClJmj/lttaTef1BQB9Pl1JKCzU+AAAeBKxeJg9k2uM9h+r2jHla12Hyn5Z+5JP+8t/XVEoLMD4AAD4ErV7WTawWe3xzxsjMbvZcf779c3xmn1DTLK2UFlp8AAC8CFu9rPuLxZ6imU/NLD5sz5in02Z2bfSVldLCig8AgB/BqpeJNjcYi5Gd4mViG0vt1rZ3cdDTWs/snIkkEXnR/nLsEnsXF1ZKCy4+AAC+cJJ9H3CSfdP4AEBUoF5W0y2htbWHvN0UiA8ABMSqmW+ByiOeKnBN4qk4qR0BYO3Mt5iGVjx6ZmsSj3Ya64UAUaNkPnM/i13pSjmbXGb9N+iPQgylT/sMeD33Y/l+E5+W+W5p0uzOr7eELPp9X9YP63Yh+s71re/mf1pQY8x79NW103ashwcAAaPVfMo5quL6sChdSboht/RUn01uJtAqF94zoPJ+c87B3FvvYmrN56nBNh1VP6zNChMUvJRj6ZqPC2qMeY2+jnbaMfTwACBgHJmvPbpn7m5XjrTXB8uueZbW8hx5lvrPgN3X/5MQXeZrFc6Mcw7qlooFMp9FnctUXEsScSkLkTgPdJv6YYaCV1/LSjWW5rttrEkaY7LCzmnUCyPyflFdRjvtGHp4ABAwRubTH9zpSleqmEuZpeXrmheXs7h83C75zf+7fz9vdp13CmeP++Vkry+frVU/m/nMHkwFr6aKHRUx0XLPgIJXU2NZfO8K6NwVeYuFVS7qVNF1aI2Y5oVtdJ+oLqSddgw9PAAIGI+aT1W6stZ8RVVm4iTScsJTL0V/xHjaeT1n1zb/te+IKSpW40/YtFnbquClSGcNI6+BjWU+i++P+kldcZU0Kkc1xow53R4xzQv76KNRXUo77Rh6eAAQMO51vgZD6aqrM9Qy5ZYm2XXKek9feZRZ0ma+/iFnW9MsXfN1WdZQ57KtMo5mPlU/THpErCp4iTaGQqv5Ot9rr6W85aMxJsfnohZ/as2neOEYfS3ttGPo4QFAwFj2dsrTxLDSVb+3U+S3S36rcjF4NMKxznfOUqkrdWVrfJ3PQ8/sJe1CFH3Cc66i6ftaB7ZaOPTDNAWvdvSTEMrym+T74/V83K/lRI2x3sjuqlnX+TQvrKOvqZ0me7GxHh4AxAcn2fdBlYsNhVE4yQ4AMYF6mT8oeAEAhMDGme+I1cBmNq9Sr3z98mnjCwEAh+Cvz7//sbUNc9k68x1Q12prm9+5RvXHp1+//G/rS3AkFhZGiIB5EaPVVq2G+fM3yx6LQ6BkvqL71bTknPV/SrpfIr8Z6lMjmmciHxj+iLpWb9JFW+o36rR+bmlnVZmNfLn53++/ff7qjk/fs8cv9smHK2xejLWyX52RVvMsdIzuYWGVi8HSf8jCxLkL2jJWt5nI3y+//UdrxtASMY97wxHnkXvDbOXj10CrSRb6XGWLXx5XWW/lvctshl+yF5pupdTKnDSOgVrztfpk2eWjVS+znSA2T4XrOlvKZwaGP6Ku1Rt10Zy/S54opx1Gaz65nyoXnZvXoWvx+uvzf6WCT4+PdDTCeYah/0wXbeVEh3cr19UZbDXPQvUdfwvr275wis9ZW3lcu6EYTopGeWvP2NxdOgO2aMinYnxbSWdtB8+3aBHzuDdscR6/N8xWPvfGUCv3vWGx0POpjCsak/zyuMpmK6/rZdP6sF2vr18+HbHsUzNfczL9nIj83py1cmY+6SSyeULAelrZwhF1rd6oi2bPfNqBvMmZr7i2p9yGM98fn/77h7uf5+NedScHBvuRjZd6uF+GzvzpLtuvzkirORYOvTM41uVcVAOyq9ZWH0V6EuZ96B3DSdGomWhhP//eZl3lW+p8rqBHzO/esMd5LCZmK597w31Nh+4No5XXVR6IxiS/fK7ywFju62V44bpe5rxxBIyT7CK/XcsiPd+uZaso1r3aE9/KPx92nS39M3aOqGv1Rl00V+ZT/j4j8z1e13OSlj+Z+bo3h2ftW5rIxw3lx56erYZGH2010cKhfoZaNUoIo3lF77n66FQgJsQw9drcZPGieXIzxUK/J5Bqq/67r3Cq+egR87s3HHEeuTfcV2fo3rC3Grs3bK3Gr7ItGuNX2eHXyFU2W/lcL8WLonJfryAy3+OWnrNreb+chMg1RbGhmk/T2Vqo5msv0r50rd6oi/aumq8OxakY/havPu20xkdaNRym/fIxteZzVsC+rSZbqL7j2UpaAkmGf6HJMdaI2pEWQ0nYwbtVEw3PHciWsYZzs8svVystYp73hqWVx73hajV8bzjHGrw3Bls5r5c1GqNX2e2X12Kz1UKPq9xOyI7rFcTTzufjfjmJ7oFnfcnd63yt+tSgztZgnXFEXas36qI51/mmKbdZM5/HzG4sViv2SMuNVfl61uo5n/5UPy/Pm43v2tqAVytjdK9Wsyw053p/C+UbzG8sSULIOxrm2puvherS0TQL2+dgU6JRSxvaW5kR87k3LK087g1LK497w2zlc2/YWo1fZbOVz1W2R2PsKrtiOHy9VC9UdUl5nS+MHS5PfYuKvndR29sp7eSUdba0zwwMv2tdq3V10d64t7N/bjZWMUgPLrT43G3X9OuXz+r/Y9JTFGMVtvPCp5V5dUZbzbXQMrqXX12o270PPq2Mu2VaNCZaqOmyTrPQP/LSO/1wRislYtr/ue57w9LK497QW/ndG+ZYPveGxUKPqzzk16RWHld5wK+h62V6YXkSfsxHna/tz/Nxkv0NFv4Mf/72i+cnv375ZcbhP1rRilZhtHr99fnX3/5vcqt9gHoZAADEBZkPAADigswHAABxQeYDAIC4IPMBAEBckPkAACAuyHwAABAXZD4AAIgLMh8AAMQFmQ8AAOKCzAcAAHFB5gMAgLj4f5IvtBwoyOY0AAAAAElFTkSuQmCC" />

正确的

 var linq = (from data1 in GetUser().Where(i => i.UserID <= 50) select data1.UserID);//IQueryable<int>,一个查询计划

 var linq2 = GetUser_StudyRecord().Where(i => linq.Contains(i.UserID.Value)).ToList();

SQL语句截图

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" />

 

对我这种散修来说,未查找更多实用的,路过的老大看到有错误指点一下

发表评论
用户名: 匿名