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?
Sono configurati sia i test che i progetti da testare come 64 bit? – Kjartan
Tutti i progetti sono AnyCPU. – Buthrakaur
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 *. –