测试自定义ORM解决方案性能开销 - 如何?

Jus*_*tin 6 sql-server testing performance orm ado.net

我使用面向方面编程(PostSHarp)创建了一个自定义ORM工具的原型,并实现了持久性无知(在编译时之前).现在,我尝试了解与使用纯DataReader和ADO.NET相比,它引入了多少开销.我做了一个测试用例 - 在MS SQL Server 2008和MySQL Community Edition中插入,读取,删除数据(大约1000条记录).我使用纯ADO.NET和我的自定义工具多次运行此测试.

我预计结果将取决于许多因素 - 内存,交换,CPU,其他进程,所以我多次运行测试(20-40).但结果真的出乎意料.他们在这些案件之间差别太大.如果只有一些极端值,我可以忽略它们(可能是交替出现或者像那样)但它们是如此不同以至于我确信我不相信这种测试.几乎一半的时间我的ORM表现出比纯ADO.NET好10%的性能,有时甚至是-10%.

有什么方法可以让这些测试可靠吗?我没有一台拥有大量内存的强大计算机,但也许我可以在某些测试中使MS SQL和MySQL或ADO.NET尽可能保持一致?那么记录的数量如何 - 更可靠,使用少量记录并运行更多次或其他方式?

Ale*_*nin 6

你看过ORMBattle.NET吗?请参阅常见问题解答,有一些与测量特定ORM工具引入的性能开销相关的想法.测试套件是开源的.

关于你的结果:

  • 一些ORM工具自动批处理语句序列(即将多个SQL语句一起发送).如果在ORM中很好地实现了这个功能,那么如果ADO.NET测试不涉及批处理,那么在CRUD操作上很容易击败普通的ADO.NET 2-4次.对ORMBattle.NET的测试测试两种情况.
  • 很大程度上取决于您如何在那里建立交易边界.有关详细信息,请参阅ORMBattle.NET常见问题解答.
  • CRUD测试根本不是最佳性能指标.一般来说,在这里获得峰值可能性很容易,因为一般来说,在这种情况下,RDBMS必须比ORM做得更多.

PS我是ORMBattle.NET的作者之一,所以如果您对细节/可能的贡献感兴趣,可以直接与我联系(或加入ORMBattle.NET Google Groups).