实验实验

最近花了二个月的业余时间重写了我以前的通用数据访问层, 由于是重写,所以我给这个项目取了个新名字:ClownFish

如果需要了解ClownFish的使用方法,请点击ClownFish 使用说明

回到顶部

ClownFish是什么?

ClownFish 是我编写的一个通用数据访问层,设计它的目的是为了:
1. 方便在 .net 项目中执行数据访问任务。
2. 避免直接使用ADO.NET带来的一大堆高度类似的繁琐代码。
3. 提供出色的性能满足实际项目需要。

ClownFish 具有以下一些技术特色:
1. 高性能:比手写代码还快的执行速度。
2. 简单:执行查询、将查询结果转成实体列表、获取输出参数。 一个调用完成三个步骤。
3. 方便:提供专用的代码生成器,直接生成调用代码或者实体类型定义代码。
4. 通用:可以非常简单地实现对多种数据库的支持。
5. 灵活:支持存储过程,参数化SQL,或者将SQL语句保存在XML配置文件中。
6. 可监控:提供一个Profiler工具,让您可以随时了解详细的数据库访问情况。

ClownFish不仅继承了老版本的通用数据访问层的全部优点, 而且在高性能,方便性,灵活性,以及代码可读性方面有了更出色的设计。

在最新的版本中,ClownFish不仅仅只是一个通用数据访问层, 还提供了:专用的代码生成器,XmlCommand管理工具,Profiler工具,它们都会为ClownFish提供更多功能。

ClownFish 是一个可免费的数据访问组件,您可以把它应用在您的 .net 项目中,让它简化您的开发工作。

回到顶部

比手写代码还快的执行速度

提高性能是创建ClownFish项目的重要原因之一,这次优化的主要目标是:比手写代码还快的执行速度。

为了让您对ClownFish的性能留有较深刻的印象,下面我将通过一个实际案例来测试它的速度。

首先,我定义了一个实体类型: 

定义这个实体类型,我关注的是它所包含的数据成员的数量,而不是那些数据成员的含义。
我认为这个类型的数据成员数量应该还是比较接近多数实际场景的。
下面再来看看如何从数据库中加载它们: 

代码中,首先定义了一个参数化的SQL查询语句,然后就是纯手工的ADO.NET代码,循环调用SqlDataReader.Read()方法,再从SqlDataReader中根据字段名称获取数据写入到实体对象的属性中。

这段代码够【手工化】吧? 由于这段代码没用使用反射代码,所以如果想追求性能,我想大家都会这样写。

在我的测试程序中,上面那段代码被下面这段代码调用: 

测试代码应该没有问题吧?

再来看一下使用ClownFish的等效测试代码:

[TestMethod("ClownFish,SQLSERVER", 2)]
public class Test_ClownFish_ShareConnection : IPerformanceTest
{
    private UiParameters uiParam;
    private ClownFish.DbContext db;

    public Test_ClownFish_ShareConnection(UiParameters param)
    {
        this.uiParam = param;
        this.db = new ClownFish.DbContext(false);
    }

    public List<OrderInfo> Run()
    {
        var parameter = new { TopN = uiParam.PageSize };
        return ClownFish.DbHelper.FillList<OrderInfo>(
                    TestHelper.QueryText, parameter, db, ClownFish.CommandKind.SqlTextWithParams);
    }

    public void Dispose()
    {
        db.Dispose();
    }
}

比较这二段代码,不难看出:使用 ClownFish 所需的代码量要 少很多

如果我以下面的测试参数执行性能测试:

可以得到下面的测试结果:

图形反映的结果很直观:ClownFish 完成测试所需时间比手写代码要略快点。

或许有些人认为:快这么一点,意义不大!
但您想过没有:ClownFish PK的对象是【手工版的专用代码】啊!

其实这个测试并没有把 ClownFish 性能很好的体现出来,因为中间有SQLSERVER的执行时间,以及跨进程的调用开销。 这二个因素所花的成本影响了ClownFish的性能优势。

下面,我又做了一组测试:直接从DataTable中加载数据。
我之所以选择这个测试方法,是因为它也是一种常见的使用方案:
我们可以将原始导出到XML文件中,然后使用XML文件做离线数据,这样可以减少对数据库的访问压力。
老版本的通用数据访问层也一直支持这个功能,所以这次就选择了这个测试方法。
说明:实际使用时,我会从XML读出数据到DataTable,供后面使用(转成实体类型只是其中的一种使用数据的方式)。

在测试之前,我们来看一下手工代码是什么样的: 

看到这个版本的LoadOrderInfo方法,您会有什么感觉?是不是很无奈?
没办法,ADO.NET就是这样设计的。写这样的代码会让人心烦(这是我的感受)!

测试调用代码: 

测试代码应该没有问题吧?

再来看一下使用ClownFish的等效测试代码:

[TestMethod("ClownFish,DataTable", 6)]
public class Test_ClownFish_LoadDataTable : IPerformanceTest
{
    public Test_ClownFish_LoadDataTable(UiParameters param) { }
    public void Dispose() { }

    public List<OrderInfo> Run()
    {
        return ClownFish.DbHelper.FillListFromTable<OrderInfo>(TestHelper.GetOrderInfoTable());
    }
}

使用 ClownFish 的代码仍然要短很多!

下面继续使用前面的测试参数来运行测试程序,得到以下测试结果:

Excel图形直观反映出 ClownFish 的速度要 比手工代码 快一倍 还不止。

看完这二个测试,ClownFish 有没有给您留下二个印象?
1. 代码量很少。
2. 性能很好。

回到顶部

简单,一个调用完成你要的全部功能

时间: 2024-10-29 19:07:36

实验实验的相关文章

实验5 简单嵌入式WEB服务器实验 实验报告 20135303 20135326

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全系统设计基础                班级:  1353 姓名:20135303 魏昊卿 学号:20135326 王亦可 成绩:             指导教师: 娄嘉鹏             实验日期:2015.12.03 实验密级:         预习程度:                     实验时间:15:30~18:00 仪器组次:          必修/选修:必修          

《信息安全系统设计基础》第二次实验实验报告

<信息安全系统设计基础>实验二实验报告 实验报告封面 实验目的与要求 解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux 环境下串行程序设计的基本方法. 掌握终端的主要属性及设置方法,熟悉终端I /O 函数的使用.学习使用多线程来完成串口的收发处理. 熟悉linux开发环境,学会基于S3C2410的linux开发环境的配置和使用.使用linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程 实验步

《信息安全系统设计基础》第三次实验实验报告

<信息安全系统设计基础>实验三实验报告 实验报告封面 实验内容 本实验基于ARM开发平台移植uC/OSII 或者uCLinux.掌握uC/OSII(uCLinux-)的移植过程:并掌握C,汇编的混合编程. 实验步骤 搭配实验环境,连接试验箱,用串口线.并口线.网线.连接实验箱和主机. 安装ADS安装文件在00-ads1.2目录下,破解方法00-ads1.2\Crack目录下. 安装GIVEIO驱动安装文件在01-GIVEIO目录:(1)把整个GIVEIO目录拷贝到C:\WINDOWS下,并把该

《软件测试》实验——实验一 测试入门

实验目的 (1) 了解什么是测试:(2) 学习评测别人的软件: 实验内容1. 评测别人的软件请下载铁路12306的手机APP,通过使用这款软件,写一篇软件的评测(300字以上),评测内容可以是这个软件的优势,或是你觉得特别好的地方,软件的缺陷.软件可以改进的地方等等.铁路12306这款手机APP的主要目的是随着互联网的快速发展和智能手机的普及以及火车票的实名制,为方便人们的日常出行,而开发出的一款便捷的火车票订票软件.铁路12306主体颜色主要由蓝色和白色组成,看上去比较简洁美观,底栏分成了“车

软件工程实验一 复利计算(第三次实验实验总结)

主题内容:复利计算器的第三次改进 追加题目: 4.利率这么低,复利计算收益都这么厉害了,如果拿100万元去买年报酬率10%的股票,若一切顺利,过多长时间,100万元就变成200万元呢? 5.如果我希望在十年内将100万元变成200万元,应该找到报酬率在多少的投资工具来帮助我达成目标?如果想在5年后本金翻倍,报酬率就应至少为多少才行呢? 附加题:6.如果每年都将积蓄的3万元进行投资,每年都能获得3%的回报,然后将这些本利之和连同年金再投入新一轮的投资,那么,30年后资产总值将变为多少?如果换成每月

《信息安全系统设计基础》第一次实验实验报告

20145336张子扬 <信息安全系统设计基础>期中总结 实验报告封面 实验步骤 连接开发板 将开发板和电脑通过串口线和网线与主机连接好,然后连接电源线,保持电源开关处于关闭的状态. 建立超级终端 运行 windows XP 系统下"开始"."所有程序"."附件"."通讯"."超级终端".新建一个通信终端,取名为 arm.在属性对话框中,将波特率设为 115200, 数据位设为 8,无奇偶校验,

20145207《信息安全系统设计基础》第一次实验实验报告

20145207李祉昂 <信息安全系统设计基础>实验报告一 实验报告封面 实验步骤 连接开发板 将开发板和电脑通过串口线和网线与主机连接好,然后连接电源线,保持电源开关处于关闭的状态. 建立超级终端 运行 windows XP 系统下"开始"."所有程序"."附件"."通讯"."超级终端".新建一个通信终端,取名为 arm.在属性对话框中,将波特率设为 115200, 数据位设为 8,无奇偶校验

《Java程序设计》第五次实验实验报告

实验封面 一.实验内容 1.阅读理解源码进入07_httpd所在的目录,使用vi编辑器理解源代码. 2.编译应用程序使用gcc编译器,分别对文件夹下的copy.c和httpd.c进行编译,出现copy和httpd的可执行文件.                         3.下载调试使用NFS服务方式将HPPTD下载到开发板上,并拷贝测试用的网页进行调试 4.本机测试在台式机的浏览器中输入http://192.168.0.121,观察在客户机的浏览器中的链接请求结果和在开发板服务器上的打印信

软件测试第二次实验实验报告

1.实验代码 1 import java.util.Collection; 2 import java.util.concurrent.TimeUnit; 3 import org.junit.*; 4 import static org.junit.Assert.*; 5 6 import org.junit.runner.RunWith; 7 import org.junit.runners.Parameterized; 8 import org.openqa.selenium.*; 9 i

Java程序设计实验 实验五

课程:Java程序设计实验   班级:1353  姓名:符余佳源  学号:20135321 成绩:                           指导教师:娄嘉鹏      实验日期:2015.6.9 实验密级:无            预习程度:                   实验时间:15:30~18:00 仪器组次:  21                    必修/选修: 选修                  实验序号:5 实验名称:TCP传输及加解密 产品托管地址:ht