2013-10-21 9 views
5

Ich habe gerade einige NUnit-Testprojekte von x86 auf AnyCPU umgestellt und begonnen, sie in 64bit Runtime mit der nunit-console.exe statt der nunit-Konsole zu starten -x86.exe. Dies führte zu meiner Überraschung zu einer 50-100% längeren Testdauer. Ich kann es leicht auf jeder der Test-Assemblys simulieren und sogar die Testläufe profilieren, aber ich bin nicht in der Lage, herauszufinden, was die Leistungseinbuße verursacht, weil einfach alles in 64 Bits langsamer läuft. Ich habe auch versucht, die Tests an einigen verschiedenen Maschinen mit denselben Ergebnissen durchzuführen.Oracle ODP.NET Managed Driver läuft 50-100% langsamer in 64Bit als in 32Bit

Test-Assemblys verwenden Spring.NET IOC und Oracle ODP Managed Provider (dies war der Grund für die Umstellung von x86 auf AnyCPU), um Integrationstests durchzuführen. Der einzige Unterschied in Testläufen ist wirklich die 32 vs 64bit Umgebung oder die Nunit ausführbare Datei (nunit-console-x86.exe vs. nunit-console.exe).

Gibt es einen allgemeinen Grund für solch einen großen Testdistanzunterschied? Oder hat jemand eine Idee, was ich überprüfen sollte, um die Ursache des Problems herauszufinden?


Follow up:

Das Problem verursacht wird, durch Oracle ODP.NET Treiber diesen August veröffentlicht Managed (Version 121010 oder 4.121.1.0). Es hat anscheinend many performance issues und einer von ihnen ist 64bit Leistung Strafe. Ich habe Dauer um 0,6 s, wenn folgenden Code unter 32-Bit-Umgebung und um 1.5s läuft, wenn unter 64-Bit ausgeführt wird:

 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); 

Jetzt gibt es irgendein Trick, wie man aus Oracle ODP.NET eine akzeptable Leistung zu bekommen Managed Treiber oder ist es nur nicht produktionsbereit, obwohl Oracle behauptet, es sei "final" release? Habe ich eine andere Möglichkeit, als zurück zum nativen ODP.NET-Provider zu gehen?

+0

Sind die Tests und die Projekte, die Sie testen, so konfiguriert, dass sie als 64-Bit-Version erstellt werden? – Kjartan

+0

Alle Projekte sind AnyCPU. – Buthrakaur

+0

Die einfache Erklärung ist, dass der Code, den Sie testen, nur so viel langsamer ist. Sie können uns nicht fragen, warum es langsamer ist, wir wissen nicht, wie es aussieht. Sie müssen einen * Profiler * fragen. –

Antwort

0

Die einfache Antwort ist ETW Traces für beide erhalten und analysieren sie mit Tools wie wpa/PerfView.

Verwandte Themen