Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8200198
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-04-23 21:36:45

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行记录的结果

         

表三:数据库测试结果



      
序号
阅读(316) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~