如何在Qt中更快地读取数据?

时间:2016-12-16 21:43:21

标签: c# qt

Qt读取数据库的速度是否比C#慢?我想我错过了什么!为了比较我在Qt中写下的阅读速度

QElapsedTimer t;
t.start();
int count = 0;
QString cs = "Driver={SQL Server}; Server=EMON;Database=FAODB;User=Test;Password=Test";
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC",cs);
db.setDatabaseName(cs);
db.open();
QSqlQuery query(db);
query.setForwardOnly(true);
query.exec("SELECT * FROM FAOCropsLivestock");
while(query.next()){
    if(query.value("Country").toString() == "\"Bangladesh\"")
        count++;
}
db.close();
qDebug()<< QString::number(count) + " elapsed ms " + QString::number(t.elapsed());

和C#

Stopwatch s = new Stopwatch();
s.Start();
int count = 0;
string cs = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;
string query = "SELECT * FROM FAOCropsLivestock";
using(SqlConnection con = new SqlConnection(cs)){
      using(SqlCommand cmd = new SqlCommand(query, con)){
            con.Open();
            SqlDataReader rd = cmd.ExecuteReader();
            while (rd.Read()){
                  if(rd["Country"].ToString() == "\"Bangladesh\"")
                        count++;                       
            }
      }
}
s.Stop();
Console.WriteLine(count + " elapsed ms " + s.ElapsedMilliseconds);

C#和Qt都适用于x86和发布模式。

在Qt的案例中,结果为"63653 elapsed ms 68213" 并在C#"63653 elapsed ms 14210"

对于Qt版本,我已经更换了

QString cs = "Driver={SQL Server}; Server=EMON;Database=FAODB;User=Test;Password=Test";
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC",cs);
db.setDatabaseName(cs);

通过

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC" /*QODBC3*/);
db.setDatabaseName("Driver={SQL Server Native Client 11.0};"\
                   "Server=EMON;Database=FAODB;Uid=Test;Pwd=Test;");

结果介于58s - 71s之间。

1 个答案:

答案 0 :(得分:0)

对于您的C#版本,您不会显示您的连接字符串。你是否使用相同的驱动程序?我不是这方面的专家,但是我的同事说的是&#34; SQL Server&#34;司机很老很慢。您可能想尝试&#34; SQL Native Client&#34;或类似的规定。无论哪种方式,请确保测试使用相同的SQL驱动程序。