• XPO读取效率测试


        这里是KaneBoyBlog上发表项目心得的一段话:

    这个项目我使用了DevExpressORM产品:XPO,它是一个可以完全对开发人员屏蔽数据库操作的透明持久层,而并非常见的在Entity与数据库Table之间定义映射关系后自动进行存取数据操作的ORM。这就意味着,在开发过程中,我可以完全不用去管建表、建字段、取数据之类的所有的数据库相关的操作。根据我的估计,它大约节约了我40%的写代码时间。我承认XPO有这样或者那样的缺点,但是,它最重要的优点,提高开发速度,完完全全的吸引了我。

    可以看出ORM的优势所在,我在我们的项目中花了点时间对XPO的读取速度做了个只能说初略的测试.

     

    我做的测试的数据库(SQL Server)服务器和工作机是分开的,在公司100M的局域网环境下工作.

    测试环境:

     

    硬件配置

    备注

    数据库服务器

    P4 2.4 /512M内存Windows 2003 Server

    塔式服务器

    工作计算机

    P4 1.8/512M内存 Windows XP

    笔记本电脑

     

    我用一张有42个字段的表,这个表和其他20多张表有关系映射(应该是比较有代表性了),在测试前我用循环语句(是用XPO)向数据库写了1万条记录,大概花了45分钟,但这不是我们测试的重点(一般很少有情况会一次写入那么多记录),最后我删除了97%的数据,留下来300条做读取测试,我把这些记录读取后放到一个DataGrid.

    测试结果:

    测试读取数据量

    起始环境

    用时

    (秒为单位,保留两位小数)

    备注

    读取1万条记录

    数据库之前已有读取,程序第一次启动

    17.68

     

    读取300条记录

    数据之前没有读取, 程序第一次启动

    2.34

     

    读取300条记录

    数据之前没有读取, 程序第一次启动

    2.56

     

    读取300条记录

    数据库之前已有读取,程序第一次启动

    1.19

     

    读取300条记录

    数据库之前已有读取,程序第一次启动

    1.48

     

    读取300条记录

    数据库之前已有读取,程序已经启动

    0.22

    在关闭测试窗口后(但没有推出测试程序),再次打开测试窗体

    读取300条记录

    数据库之前已有读取,程序已经启动

    0.18

     

     

    任务管理器进程管理的显示上看这个测试程序在读取记录前占用24M左右的内存,在读取300条记录后占用的内存在34M58M之间.就是关闭测试窗体,但不推出程序也要占那么多,这是因为XPO有个对象缓存池,有了这个缓存XPO的工作效率相当高,在实际使用的感觉中和DataSet差不多,但也不像XPO宣传的那样在某些情况下比DataSet还快,我个人认为DataSet的效率应该比XPO高那么一点点,但差别甚微是是主观感觉不出来的(我具体没有做个测试).

    从上面的结果可以看出读取数据所花费的时间和SQL Server的缓存有很大关系,当然和网络环境其他因素也有关.XPO的表现令我感到满意,现在可以大胆的用XPO做项目了.ORM框架的效率问题一直是人们争论的中心,我个人认为在项目要求不是很严格的情况(对数据实时性要求)下完全可以用XPO,这是成倍提高开发效率的好东西.

     

    :

    我测试用的代码:

    private void btnStart_Click(object sender, System.EventArgs e)
    {
                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();
    }

  • 相关阅读:
    如何用redis/memcache做Mysql缓存层?
    孤儿进程和僵尸进程总结
    二叉树的遍历(非递归)
    Linux进程分配内存的两种方式--brk() 和mmap()
    Hbase
    cgroup 分析之CPU和内存部分
    十道海量数据处理面试题与十个方法大总结
    快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,即USE方法
    红黑树
    tcp 两个重要窗口:滑动窗口 和 拥塞窗口
  • 原文地址:https://www.cnblogs.com/format/p/26419.html
Copyright © 2020-2023  润新知