2013-10-21 18 views
5

Ho appena passato alcuni progetti di test NUnit da x86 a AnyCPU e ho iniziato a eseguirli in runtime a 64 bit utilizzando nunit-console.exe invece di nunit-console -x86.exe. Ciò ha comportato una durata del test del 50-100% più lunga con mia grande sorpresa. Posso facilmente simularlo ripetutamente su uno qualsiasi dei gruppi di test e persino profilare le esecuzioni di test, ma non sono in grado di capire cosa causa la penalizzazione delle prestazioni, perché tutto sembra rallentare a 64 bit. Ho anche provato a eseguire i test su poche macchine diverse con gli stessi risultati.Driver ODP.NET Oracle in esecuzione 50-100% più lento a 64 bit rispetto a 32 bit

Gli assembly di test utilizzano il provider gestito Spring.NET IOC e Oracle ODP (questo è stato il motivo alla base del passaggio da test a x86 a AnyCPU) per eseguire test di integrazione. L'unica differenza nelle esecuzioni di test è in realtà l'ambiente 32 vs 64 bit o l'eseguibile nunit (nunit-console-x86.exe vs nunit-console.exe) rispettivamente.

C'è qualche ragione generale per una differenza di durata del test così grande? O qualcuno ha un'idea di cosa dovrei controllare per scoprire la causa del problema?


Follow up:

Il problema è causato da Oracle ODP.NET Managed driver rilasciato questo mese di agosto (versione 121010 o 4.121.1.0). Apparentemente ha many performance issues e uno di questi è la penalizzazione delle prestazioni a 64 bit. Ho avuto la durata intorno 0.6s durante l'esecuzione di codice seguente in ambiente a 32 bit e in tutto 1.5s durante l'esecuzione in 64bit:

 var sw = Stopwatch.StartNew(); 
     using (var conn = new OracleConnection(ConnectionString)) 
     { 
      conn.Open(); 

      for (var i = 0; i < 100; i++) 
      { 
       using (var cmd = conn.CreateCommand()) 
       { 
        cmd.CommandText = "select sysdate from dual"; 
        var result = Convert.ToDateTime(cmd.ExecuteScalar()); 
       } 
      } 
     } 

     Console.Out.WriteLine(sw.Elapsed); 

Ora c'è qualche trucco come ottenere prestazioni accettabili di Oracle ODP.NET Gestito conducente o è non è ancora pronta la produzione, anche se Oracle afferma che si tratta di una pubblicazione "definitiva"? Ho qualche altra opzione eccetto tornare al provider ODP.NET nativo?

+0

Sono configurati sia i test che i progetti da testare come 64 bit? – Kjartan

+0

Tutti i progetti sono AnyCPU. – Buthrakaur

+0

La semplice spiegazione è che il codice che si sta testando è molto più lento. Non puoi chiederci perché è più lento, non sappiamo come appare. Devi chiedere un * profiler *. –

risposta

0

La risposta semplice è ottenere tracce ETW per entrambi e analizzarli utilizzando strumenti come wpa/PerfView.

Problemi correlati