【发布时间】:2016-12-16 21:43:21
【问题描述】:
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;");
结果介于 58 秒到 71 秒之间。
【问题讨论】:
-
我会先花更多时间来缩小范围。也许由于某种原因,qt
Open调用需要 54 秒。尝试单独计时while循环,以验证执行查询本身占用了 68 秒的大部分时间。 -
@Quantic 在这种情况下 Qt 最好的是
54s和 C#13s -
你都在发布模式下运行了吗?
-
如前所述,是的@ThomasAyoub