2012-03-27 83 views
2

我需要插入行的行到一个数据库中删除(不更新)数据到一个SQL Server数据库的最高效的方式,然后在另一个线程读取这些行,然后(在一个单独的呼叫删除他们)。书写,阅读和.NET

通常情况下,我只想摆脱实体框架这一点。但我需要这样做很快。真的很快。

一行将是bigint,bigintvarchar(max)

是否有快速的方式,实体框架?如果是这样,那是什么?

(我会针对SQL Server 2008 R2)

+1

没有什么比一个DataReader更快。你有多个线程会去做脏读吗? – SQLMason 2012-03-27 20:25:08

+0

FWIW,SO使用[Dapper](http://code.google.com/p/dapper-dot-net/)。 – jrummell 2012-03-27 20:43:36

回答

5

还有就是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 
+0

我对EF的持续时间有点惊讶,但并不完全震惊。你会得到“更多的好处”,但它明显很慢。 – SQLMason 2012-03-27 20:32:33

5

原始ADO.NET是最快的,但我会选择Dapper作为微型ORM。它速度非常快,在开发过程中可以帮助你很多。

然而,重要的是要知道,为什么Dapper或类似的将最快,主要是因为你的控制,你可以仔细制作最好的执行SQL查询。

我就懒得多想了数据访问技术,除了你需要的东西,为您带来接近实际的SQL,并在你不执行太多的抽象。 利用您的时间思考数据库,索引布局,事务处理和查询优化。这就是你会发现主要性能收益的地方。