我需要插入行的行到一个数据库中删除(不更新)数据到一个SQL Server数据库的最高效的方式,然后在另一个线程读取这些行,然后(在一个单独的呼叫删除他们)。书写,阅读和.NET
通常情况下,我只想摆脱实体框架这一点。但我需要这样做很快。真的很快。
一行将是bigint
,bigint
和varchar(max)
。
是否有快速的方式,实体框架?如果是这样,那是什么?
(我会针对SQL Server 2008 R2)
我需要插入行的行到一个数据库中删除(不更新)数据到一个SQL Server数据库的最高效的方式,然后在另一个线程读取这些行,然后(在一个单独的呼叫删除他们)。书写,阅读和.NET
通常情况下,我只想摆脱实体框架这一点。但我需要这样做很快。真的很快。
一行将是bigint
,bigint
和varchar(max)
。
是否有快速的方式,实体框架?如果是这样,那是什么?
(我会针对SQL Server 2008 R2)
还有就是Dapper ORM页关于这个的一些好的信息。
请参阅第节SELECT性能超过500次迭代映射 - POCO序列化及以下。它只讨论SELECT,但你可以从某种程度上推断出来。
例如,你可以看到,实体框架是相当多的去了,在查询速度方面最糟糕的方式。
Method Duration Remarks
Hand coded (using a SqlDataReader) 47ms
Dapper ExecuteMapperQuery<Post> 49ms
ServiceStack.OrmLite (QueryById) 50ms
PetaPoco 52ms Can be faster
BLToolkit 80ms
SubSonic CodingHorror 107ms
NHibernate SQL 104ms
Linq 2 SQL ExecuteQuery 181ms
Entity framework ExecuteStoreQuery 631ms
我对EF的持续时间有点惊讶,但并不完全震惊。你会得到“更多的好处”,但它明显很慢。 – SQLMason 2012-03-27 20:32:33
原始ADO.NET是最快的,但我会选择Dapper作为微型ORM。它速度非常快,在开发过程中可以帮助你很多。
然而,重要的是要知道,为什么Dapper或类似的将最快,主要是因为你的控制,你可以仔细制作最好的执行SQL查询。
我就懒得多想了数据访问技术,除了你需要的东西,为您带来接近实际的SQL,并在你不执行太多的抽象。 利用您的时间思考数据库,索引布局,事务处理和查询优化。这就是你会发现主要性能收益的地方。
没有什么比一个DataReader更快。你有多个线程会去做脏读吗? – SQLMason 2012-03-27 20:25:08
FWIW,SO使用[Dapper](http://code.google.com/p/dapper-dot-net/)。 – jrummell 2012-03-27 20:43:36