今天装好了VS2008 Beta2,就迫不及待地试用一下Linq中的ORM功能,在初步尝试后,发现Linq中的ORM还是非常不错的,通过反射查看System.Data.Linq.dll发现,Linq中的ORM是使用反射完成了OR的映射工作,基于此,我开始有点怀疑Linq中的ORM的性能问题。为了进一步研究问题,我写了一个简单的测试,在事务中,使用DataRabbit 3.0和 Linq to sql 以ORM的方式分别向数据库的Customer表中插入1000条数据,来看各自所需的时间。
首先,Customer结构如下:

测试的代码如下:
(1)使用Linq ORM:
DataClasses1DataContextdb=newDataClasses1DataContext("DataSource=127.0.0.1;InitialCatalog=LinqDb;PersistSecurityInfo=True;UserID=sa;Password=chenqi");
DateTimestart=DateTime.Now;
for(inti=1000;i<2000;i++)
{
db.Customers.Add(newCustomer{ID=i,Name="Peng",ZipCode=434100});
}
db.SubmitChanges();
DateTimeend=DateTime.Now;
TimeSpanspan=end-start;
this.label1.Text=span.TotalSeconds.ToString();
(2)使用DataRabbit3.0的ORM
DataRabbit.DataConfigurationconfig=newDataRabbit.DataConfiguration(DataRabbit.DataBaseType.SqlServer,"127.0.0.1","sa","chenqi","LinqDb",null);
DataRabbit.Application.TransactionScopeFactorytransactionScopeFactory=newDataRabbit.Application.TransactionScopeFactory(config);
transactionScopeFactory.NewTransactionScope(false).NewOrmAccesser<LinqTest.MyOrm.Customer>().Insert(newLinqTest.MyOrm.Customer(-1,"Peng",434100));
DateTimestart=DateTime.Now;
using(DataRabbit.Application.TransactionScopescope=transactionScopeFactory.NewTransactionScope())
{
DataRabbit.ORM.IOrmAccesser<LinqTest.MyOrm.Customer>accesser=scope.NewOrmAccesser<LinqTest.MyOrm.Customer>();
for(inti=2000;i<3000;i++)
{
accesser.Insert(newLinqTest.MyOrm.Customer(i,"Peng",434100));
}
scope.Commit();
}
DateTimeend=DateTime.Now;
TimeSpanspan=end-start;
this.label2.Text=span.TotalSeconds.ToString();
清空Customer的内容,第一次点击Form的按钮(先linq,后DataRabbit)后,界面显示如下:

再次清空Customer的内容,第二次点击Form的按钮(先linq,后DataRabbit)后,界面显示如下:

和结果一相比,我们发现linq ORM在运行时作了一些非常有效的优化,性能提升了将近一倍。如果再重复试验,会发现Linq和DataRabbit所需的时间基本上不再变化。
从稳定的结果看来,DataRabbit3.0的ORM性能比Linq要高出将近一倍,出现这样的结果,也是我意料之中的吧。DataRabbit3.0采用Emit动态生成程序集可以完全避免反射所带来的性能损失,而Linq to sql的内部采用反射实现ORM而导致性能稍微下降则是情理之中的了。
Linq使用反射实现ORM的一个地方如下所示:

(System.Data.Linq.ChangeDirector+StandardChangeDirector的Insert方法实现)
也许,也许还有更高效使用Linq ORM的方法而我没有发现,如果你知道,请一定留言告诉我。
测试的源码从此处下载。
分享到:
相关推荐
LINQ (Language Integrated Query) 是.NET框架中的一种技术,它允许开发者使用类似SQL的语法在C#或VB.NET等编程语言中查询数据。"LINQ to SQL"是LINQ的一个特定实现,它专用于与关系数据库进行交互。在这个“LINQ to...
通过使用LINQ-to-SQL,我们可以避免编写大量SQL语句,而是直接在C#代码中进行数据查询、更新和删除操作。 2. 创建LINQ-to-SQL数据上下文: 在开始使用LINQ-to-SQL之前,需要创建一个DataContext类实例,该类代表与...
接下来,我们需要创建一个DataContext对象,它是LINQ to SQL与数据库交互的基础。DataContext会映射到数据库模式,并提供对表的强类型访问。 ```csharp using System.Data.Linq; // 创建连接字符串,指向你的...
在本例中,我们关注的是LINQ to SQL,这是一种特定的LINQ实现,它用于与关系数据库进行交互,如SQL Server 2005。在VS2008中,LINQ to SQL提供了直观的方式来映射数据库模式到.NET类,从而简化了数据访问。 分页是...
- **定义**:LINQ to SQL 是一种轻量级的 ORM 框架,由 C# 团队开发并在 .NET Framework 3.5 中首次推出。它的主要目标是简化 Microsoft SQL Server 数据库的应用程序开发过程。 - **特点**: - **易用性**:LINQ ...
- **LINQ To SQL 基础**:LINQ To SQL 允许开发者以声明式的方式编写数据库查询,从而简化了数据访问层的开发过程。它通过生成相应的数据访问类和存储过程来实现对数据库的操作,而无需手动编写复杂的 SQL 语句。 - ...
LINQ to SQL 是一种轻量级的对象关系映射(ORM)工具,它将数据库表映射为.NET类,将SQL查询转换为.NET方法调用。开发者可以在.NET类上直接执行查询,而这些查询会被自动转换为对应的SQL语句在数据库中执行。 **3. ...
1. 数据模型:LINQ to SQL是.NET Framework的一个组件,它允许直接在对象模型上操作SQL Server数据库。通过映射数据库表和视图到类,我们可以直接对这些类进行CRUD(创建、读取、更新、删除)操作。 2. 设计工具:...
- **Linq To Sql的优势**:使用Linq To Sql时,只需基于数据库表生成相应的.NET类文件,系统会自动处理数据与对象之间的转换。这样做的好处是减少代码量,提高开发效率,并降低出错的可能性。 #### 2. Linq To Sql...
【Linq to sql 教程】是一门针对初学者精心设计的教程,旨在帮助学习者逐步掌握使用Linq(Language Integrated Query,语言集成查询)与SQL进行数据操作的技术。Linq是.NET框架中的一个强大特性,它允许开发人员在C#...
LINQ to SQL提供了强大的数据访问能力,它将数据库操作与.NET代码紧密集成,提高了开发效率。虽然在现代.NET开发中,Entity Framework和EF Core已成为更主流的选择,但理解并掌握LINQ to SQL的基本原理和技巧,对于...
【标题】"LINQ TO SQL DEMO"是一个关于使用LINQ (Language Integrated Query) 技术与SQL数据库交互的示例项目。LINQ是.NET框架中的一项重要特性,它允许开发者使用C#或Visual Basic等语言的语法直接进行数据查询,...
1. **对象关系映射 (ORM)**:LINQ to SQL 提供了一种轻量级的ORM解决方案,将数据库表映射到C#类,字段映射到类的属性。通过这种方式,我们可以用面向对象的方式处理数据库操作。 2. **DataContext**:这是LINQ to ...
**LINQ to SQL** 是一种使开发人员能够使用面向对象的方法访问数据库的技术。它提供了将数据库表映射到.NET Framework中类的能力,允许开发人员通过编写LINQ查询而不是SQL语句来操作数据。 #### 二、LINQ to SQL 的...
LINQ to SQL是.NET Framework下的一个ORM(Object-Relational Mapping)框架,它允许开发人员通过C#或VB.NET直接操作SQL Server数据库,而无需编写SQL语句。这项技术极大地简化了数据库操作,并提高了代码的可读性和可...
19. **ADO.NET and LINQ to SQL**:展示了 LINQ to SQL 如何与 ADO.NET 框架集成,提供了更高级的数据访问能力。 20. **Stored Procedures**:使用 LINQ to SQL 调用数据库存储过程,并将结果映射到对象。 21. **...
在.NET框架中,LINQ(Language Integrated Query,语言集成查询)是一种强大的数据查询技术,它允许开发者使用自然、直观的代码来查询各种数据源。在本教程中,我们将重点讨论如何利用LINQ to SQL实现分层架构,并...
《SubSonic 3.0 源码分析与应用》 SubSonic 是一个开源的、基于.NET的数据库访问框架,它简化了数据库操作,提供了自动代码生成和ORM(对象关系映射)功能。标题中的 "subsonic-SubSonic-3.0-3.0.0.4-89-g18114a1" ...
实现linq多个查询条件连接功能(支持linq to sql 和linq to entity)。 按多个指定属性排序功能。 不同参数的lamdba表达式条件间的转换功能。
1. **数据模型设计**:LINQ to SQL提供了一个直观的图形化工具——LINQ to SQL设计器,用于创建与数据库表对应的实体类。通过拖放操作,开发者可以轻松建立对象关系映射(ORM)。 2. **查询编写**:使用C#或VB.NET...