Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2086862
  • 博文数量: 909
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 12260
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-06 20:50
文章分类

全部博文(909)

文章存档

2008年(909)

我的朋友

分类:

2008-05-06 21:22:40

一起学习
C#和C 的速度大比拼(第二部分)

编译:藏北

数据库存取测试

在这一部分,我们将用C 和C#代码来测试两者对数据库的存取和处理。方法是对同一个数据库表进行操作。表结构如下:

CREATE TABLE testtable

(

  col1 INTEGER,

  col2 VARCHAR(50),



  PRIMARY KEY (col1)

)      

测试将分三个部分,第一部分和第三部分集中对数据处理,第二部分集中对数据存取。数据处理和数据存取的测试结果是分开呈现的。 下面是数据存取和处理的C 代码:

代码五:db.cpp

#import "msado15.dll" \

no_namespace rename("EOF", "EndOfFile")

#include 

#include 

#include 



int main(int argc, char* argv[])

{

  if (argc != 2)

  {

    std::cerr << "Usage:\tdb [rows]\n"; 

    return 1;

  };



  ::CoInitialize(NULL);

  int NUM = atoi(argv[1]);

  DWORD dw = ::GetTickCount();

  _ConnectionPtr conptr(__uuidof(Connection));

  conptr->Open(L"Provider=Microsoft.Jet.OLEDB.4.0;"

    "Data Source=c:\\db.mdb;",

    L"",

    L"",

    adOpenUnspecified);

  for (int i=0;iExecute(sql, &RecordsEffected, adCmdText);

  };



  DWORD dw2 = ::GetTickCount();

  std::cout << "Milliseconds = " << dw2-dw 

    << std::endl;  

  dw = ::GetTickCount();

  for (int j=0;j<100;j  )

  {

    _RecordsetPtr rsptr(__uuidof(Recordset));

    rsptr->Open(L"SELECT col1, col2 FROM testtable",

    conptr.GetInterfacePtr(),  

    adOpenForwardOnly, adLockOptimistic, adCmdText);

    while (rsptr->EndOfFile)

    {

      _variant_t v1 = rsptr->GetCollect("col1");

      _variant_t v2 = rsptr->GetCollect("col2");

      rsptr->MoveNext();

    };

    rsptr->Close();

  };



  dw2 = ::GetTickCount();

  std::cout << "Milliseconds = " << dw2-dw 

    << std::endl;  

  dw = ::GetTickCount();

  for (int i=0;i



下表为运行十次,每次100行记录的结果

         

表三:数据库测试结果



      
序号
下载本文示例代码


C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)C#和C 的速度大比拼(第二部分)
阅读(489) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~