首先我描叙一下这两个工具对于我的好处
1)EntityFramework比较适合建模,用CodeFrist和Scaffold非常容易生成基本代码,EF非常容易控制并发和事务。
2)MVC对于前端的控制和SEO控制比较灵活,与Jquery.Ajax()等效果结合更好、
现在面临的问题就是处理大数据量时该组合就容易遇到瓶颈,不知道大家有没有更好的解决方案!前后端的优化方案皆可拿出来分享:
1)例如前端直接Json传输是否比返回强类型对象更好?
2)后端把查询单独用其他的例如DataReader之类的替换更好?
或者还有缓存IOC等的应用,在这里希望得到大家的指点和交流。
几十万条数据,正确使用Entity Framework不会有性能问题。
博问现在就用的是Entity Framework + MVC。
可能是页面上调用不同的数据太多了, 比如一些统计类的直接Count出来
请问dudu博问有没有做什么架构或优化之类的?如果有的话希望你改天写篇实际项目的文章分享下嘿
@leeolevis: 用SQL Profiler查看一下实际执行的SQL语句,要么是SQL语句问题,要么是索引问题。
你说的瓶颈有哪些
如果完全不改造的话几十万条数据就很慢呢。
不太理解你的JSON传输和强类型对象是什么意思?
我只知道,运行在服务器端的代码使用强类型最优;运行在客户端的脚本,需要服务器将强类型转换为传输格式(JSON,XML或者其它什么形式的字符串表示法),根据传输数据的大小,JSON会比XML小。
使用EF,还是使用DataReader的区别并不大,差异在于将TDS数据转换为对象的开销。如果有特别的需求,同时又允许这样做,可以直接使用DataReader,将数据直接按照固定格式写入传输流中,而不用经历转换为强类型或DataTable后再转换为传输数据格式。
前台普通加载的数据可以用jQuery.tmpl等方案取代,性能会好一点(只适合List,用在增改上EF和MVC集成的验证功能就不那么好用),你后面说的那段话很对,我现在正正在寻求一个取代EF查询慢的方案,还没找到合适的。其实性能主要体现在查询列表和列表统计上,可能我关联做的有点多的缘故
@leeolevis: 一般来说,我不认为EF的查询会比直接编写SQL查询要慢,你可以通过EF生成的查询语句与你自己编写的查询语句在SQL Server Management Studio中测试便知。EF的流程很简单,把表达式转换为SQL,然后执行,增加的开销就是把表达式转换为SQL,对于一个复杂的SQL的执行时间而言,可以忽略不计。因此,你应该先做测试。
如果数据量特别巨大的话,还是要考虑的数据库的优化。比如建立索引,对表进行表分区,读写分离,对常用的sql以存储过程代替。并且实际的开发当中要EF与ADO.NET配合使用,发挥各自己优势。并且要合理的使用缓存机制,比如redis和mongodb以及memcache和合理使用。同时要做到代码规范,分层合理,页面结构合理。比如将js一般放到页面尾端。合并共用的js。有了这些,大数据的处理将不是问题。当然,硬件上也需要扩充,如果条件允许的话。
恩,说的非常好。这些我也知道一些,但是具体的运用上还需要花费很多时间去研究。谢谢,以后希望有机会多交流。博客关注你呢
这是生成的sql语句有问题,你优化下生成出来的sql语句,比如在数据库建立索引,应该能解决你的问题。
建议用sql Profiler 把sql语句抓出来,然后去执行看看