2016-12-16 1 views
5

Qt가 데이터베이스를 C#보다 느리게 읽습니까? 나는 뭔가를 놓치고 있다고 생각한다! 내가 Qt를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); 

에 folllowing 작성한 읽기 속도를 비교하기 위해 모두 C# 및 Qt를 x86과 릴리스 모드에 있습니다. Qt의 경우

이 결과는 "63653 elapsed ms 68213" 했다 및 C# "63653 elapsed ms 14210"


Qt는 버전에 대한

에 나는

결과 58s 사이에서 있었다

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

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

대체했다 - 71s.

+3

나는 우선 더 많은 것들을 좁혀 야 할 것이다. 어쩌면 Qt'Open' 호출은 어떤 이유로 54 초가 걸릴 것입니다. 쿼리 자체를 실행하는 것이 68 초의 대부분을 차지하는 지 확인하기 위해'while' 루프 만 따로 시간을 시험해보십시오. – Quantic

+0

@Quantic 그 경우 Qt의 최고는'54s'와 C#'13s' –

+0

둘 다 릴리스 모드에서 실행 했습니까? –

답변

0

C# 버전의 경우 연결 문자열을 표시하지 않습니다. 둘 다 동일한 드라이버를 사용하고 있습니까? 나는이 문제에 대해 전문가가 아니지만 "SQL Server"드라이버가 매우 오래되고 느리다 고 말하는 동료입니다. 아마도 "SQL Native Client"또는 그 라인을 따라 뭔가를 시도해보십시오. 어느 쪽이든, 테스트가 동일한 SQL 드라이버를 사용하는지 확인하십시오.

+0

'문자열 cs = "서버 = EMON; 데이터베이스 = FAODB; 사용자 = 테스트; 암호 = 테스트"; 어떤 드라이버가 C#에서 사용되고 있는지 확실하지 않습니다. MS SQL Server에 액세스하려면'using System.Data.SqlClient; '를 추가하면됩니다. –

+1

.NET에서 어떤 드라이버가 System.Data.SqlClient와 함께 사용되는지는 잘 모르겠지만 그 차이점은 의심 스럽습니다. 현재 드라이버로 C++ 코드를 업데이트하고 다시 테스트 해보십시오. – goug

+0

나는'QODBC3'와'SQL Server Native Client 11.0'을 시도했지만 그 결과는 바뀌지 않았습니다. 내 게시물 @ goug에 코드를 추가했습니다. –

관련 문제