如何在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之间。

对于C#版本,您不显示连接字符串。 你是否使用相同的驱动程序? 我不是这方面的专家,但我的同事说“SQL Server”驱动程序非常非常老而且速度慢。 您可能想尝试“SQL Native Client”或类似的东西。 无论哪种方式,请确保测试使用相同的SQL驱动程序。