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();
}
}
}
Micro-test de performances incorrect détecté: pas de préchauffage en cours de traitement. –
@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
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. –