2011-09-22 3 views
2

de vshost (exécutés dans la version VS)J'attends MyApp.exe court plus vite que myApp.vshost.exe, mais

array pure 00:00:02.9634819 
1200000000 
Basic: 00:00:04.1682663 

de programme autonome (version compilée)

array pure 00:00:09.1783278 // slower, why? 
1200000000 
Basic: 00:00:00.5985118 // faster, as expected 

Il semble que courir de VS parfois accélérer les programmes?

Mon code de test est:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 

namespace vsHostTest 
{ 
    class Program 
    { 
     static long Five(int s0, int s1, int s2, int s3, int s4) 
     { 
      return s4 + 100 * s3 + 10000 * s2 + 1000000 * s1 + 100000000 * s0; 
     } 

     static void Main(string[] args) 
     { 
      Stopwatch watch = new Stopwatch(); 
      long testSize = 10000000; 
      int[] myarray = new int[] { 1, 2, 3 }; 
      watch.Start(); 
      for (int j = 0; j < testSize; j++) 
      { 

       bool i = myarray.Contains(2); 

      } 
      watch.Stop(); 
      Console.WriteLine("array pure {0}", watch.Elapsed); 

      testSize = 200000000; 
      long checksum = 0; 
      watch.Restart(); 
      for (long i = 0; i < testSize; i++) 
      { 
       long ret = Five(1, 2, 3, 4, 5); 
       checksum += ret % 9; 
      } 
      watch.Stop(); 
      Console.WriteLine(checksum); 
      Console.WriteLine("Basic: {0}", watch.Elapsed); 
      Console.ReadKey(); 
     } 
    } 
} 
+0

Micro-test de performances incorrect détecté: pas de préchauffage en cours de traitement. –

+0

@pst c'est 9 s, ou vous avez une meilleure idée? J'ai une plus grande application qui se comporte différemment dans vshost et autonome, donc j'ai essayé de décomposer en petits morceaux. C'est l'endroit qui attire mon attention – colinfang

+0

Voir ci-dessus. Mauvais micro-benchmark. Donnez à l'ordinateur virtuel le temps de se réchauffer. La façon la plus simple de le faire est simplement de lancer tous les tests plusieurs fois dans une grosse boucle (assurez-vous d'utiliser Redémarrer ou une nouvelle montre * tout le temps) - toujours pas idéal mais cela a plus de chance de révéler les valeurs aberrantes. –

Répondre

3

j'ai couru chacun un quatre fois, mais sans compter le premier résultat pour chaque moyenne.

vshost:

tableau pur: 6,83 de base: 3,62

console:

tableau

pur: 6,64 de base: 1,57

Je dois ajouter que tous les temps étaient plus lents dans vshost qu'ils étaient en console. Je ne suis pas sûr de savoir pourquoi vous obtenez les résultats, mais vshost attache un débogueur au processus alors que l'exécuter via la console ne le fait pas. La version de la console sera toujours plus rapide à cause de cela.

En outre, lors de l'analyse comparative des applications .net, l'exécution du test n'est pas suffisante pour obtenir des mesures précises. Vous devriez toujours lancer le test plusieurs fois, en jetant le premier (si vous voulez ne pas comparer les passages froids, les caches .net) ou les mesures les plus éloignées.

En outre, et je me sens stupide de demander cela, êtes-vous sûr que vous avez exécuté la version de sortie lorsque vous étiez en cours d'exécution via la console? Je suis sûr que vous avez fait, mais je demande toujours, car je fais parfois des erreurs idiotes comme ça.

+0

thx pour vos tests, maintenant je suis convaincu que c'est la chose x64 qui a foiré. – colinfang

Questions connexes