这里是KaneBoy在Blog上发表项目心得的一段话:
这个项目我使用了DevExpress的ORM产品:XPO,它是一个可以完全对开发人员屏蔽数据库操作的透明持久层,而并非常见的在Entity与数据库Table之间定义映射关系后自动进行存取数据操作的ORM。这就意味着,在开发过程中,我可以完全不用去管建表、建字段、取数据之类的所有的数据库相关的操作。根据我的估计,它大约节约了我40%的写代码时间。我承认XPO有这样或者那样的缺点,但是,它最重要的优点,提高开发速度,完完全全的吸引了我。 |
可以看出ORM的优势所在,我在我们的项目中花了点时间对XPO的读取速度做了个只能说初略的测试.
我做的测试的数据库(SQL Server)服务器和工作机是分开的,在公司
测试环境:
|
硬件配置 |
备注 |
数据库服务器 |
P4 2.4 / |
塔式服务器 |
工作计算机 |
P4 1.8/ |
笔记本电脑 |
我用一张有42个字段的表,这个表和其他20多张表有关系映射(应该是比较有代表性了),在测试前我用循环语句(是用XPO)向数据库写了1万条记录,大概花了4到5分钟,但这不是我们测试的重点(一般很少有情况会一次写入那么多记录),最后我删除了97%的数据,留下来300条做读取测试,我把这些记录读取后放到一个DataGrid中.
测试结果:
测试读取数据量 |
起始环境 |
用时 (秒为单位,保留两位小数) |
备注 |
读取1万条记录 |
数据库之前已有读取,程序第一次启动 |
17.68 |
|
读取300条记录 |
数据之前没有读取, 程序第一次启动 |
2.34 |
|
读取300条记录 |
数据之前没有读取, 程序第一次启动 |
2.56 |
|
读取300条记录 |
数据库之前已有读取,程序第一次启动 |
1.19 |
|
读取300条记录 |
数据库之前已有读取,程序第一次启动 |
1.48 |
|
读取300条记录 |
数据库之前已有读取,程序已经启动 |
0.22 |
在关闭测试窗口后(但没有推出测试程序),再次打开测试窗体 |
读取300条记录 |
数据库之前已有读取,程序已经启动 |
0.18 |
|
从”任务管理器”进程管理的显示上看这个测试程序在读取记录前占用
从上面的结果可以看出读取数据所花费的时间和SQL Server的缓存有很大关系,当然和网络环境其他因素也有关.XPO的表现令我感到满意,现在可以大胆的用XPO做项目了.ORM框架的效率问题一直是人们争论的中心,我个人认为在项目要求不是很严格的情况(对数据实时性要求)下完全可以用XPO,这是成倍提高开发效率的好东西.
附:
我测试用的代码:
{
DateTime start=DateTime.Now;
this.labStart.Text+=start.ToString();
Manager dm=new Manager();//在实例化对象的时候构造函数用XPO读取300条记录
this.dataGrid1.DataSource=dm.Drugs;//填充到DataGrid赋值
DateTime end=DateTime.Now;
this.labEnd.Text+=end.ToString();
TimeSpan js=end-start;
this.labTotal.Text+=js.TotalSeconds.ToString();
}