【问题标题】:How to read data faster in Qt?如何在 Qt 中更快地读取数据?
【发布时间】: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

标签: c# qt


【解决方案1】:

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

【讨论】:

  • 同写string cs = "Server=EMON;Database=FAODB;user=Test;password=Test";。我不确定 C# 正在使用哪个驱动程序。我只需添加 using System.Data.SqlClient; 即可访问 MS SQL Server。
  • 我不确定 .NET 与 System.Data.SqlClient 使用哪个驱动程序,但我怀疑这就是区别。尝试使用当前驱动程序更新您的 C++ 代码并重新测试。
  • 我已经尝试过 QODBC3SQL Server Native Client 11.0 但它并没有改变结果。我在我的帖子@goug 中添加了代码
  • 你找到解决方案了吗?
猜你喜欢
  • 2011-06-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多