1

J'ai une bibliothèque tierce et un simple test d'évaluation que j'écris moi-même pour tester cette bibliothèque pour des performances. Bibliothèque tierce partie est bibliothèque C++/CLI .NET et la plupart du code est non géré. Cette bibliothèque est assemblée pour .NET Framework 2.0. Mon test de référence est un code C# géré qui ajoute peu de ressources à la bibliothèque, seulement des appels simples aux méthodes, abonnement aux gestionnaires d'événements, fermeture/ouverture de connexions, etc. La bibliothèque effectue des opérations dans plusieurs threads de travail.Étrange augmentation des performances dans les projets compilés dans VS 2008 comparant avec VS2005

Chose étrange - lorsque je compile par test de référence avec VS 2005 et quand je fais la même chose avec VS 2008 - j'ai obtenu des valeurs de performance différentes (VS 2008 est 10% de mieux).

Ce qui peut entraîner une augmentation des performances, si tout mon code utilise uniquement des fonctionnalités .NET 2.0, aucun langage/fonctionnalités ou bibliothèques de 3.5 n'est utilisé. Mon projet de référence ne fait référence qu'à System.dll et à une DLL tierce, et le code de référence est absolument le même dans les projets VS2005 et VS2008.

+0

J'apprécierais énormément les liens vers des articles, des blogs, etc. où les différences de performance entre les compilateurs VS2005 et VS2008/JIT sont discutées. Je blonds, puis-je recommander à nos clients de recompiler les projets VS2005 existants dans VS2008 (s'ils ont VS2008) pour gagner de la performance? –

Répondre

2

Même si vous n'utilisez que la fonctionnalité 2.0 (langage? Bibliothèque?), Il se peut que le 3.5 JIT optimise simplement le code, ou que certaines bibliothèques soient plus optimisées. En d'autres termes: alors que les interfaces des fonctions 2.0 restent identiques, cela ne doit pas être le cas pour l'implémentation. Je suppose que le GC (et son verrouillage est également constamment modifié)

Il sera très difficile de comprendre ce qui cause exactement la différence. Cela pourrait être aussi simple que certaines fonctions primitives (comme memmove, recherche d'octet/mot dans mem) étant optimisées pour les cpu plus récents.

+0

J'ai considéré que la bibliothèque de base pour .NET 3.5 et .NET 2.0 est la même que System.DLL 2.0.0.0 donc aucune différence d'exécution ne devrait être là. Peut-être que seul le compilateur peut ajouter plus d'optimisation, en insérant plus de fonctions ou tout ce qu'il peut faire ... –

+1

(notez que je ne suis pas un expert .NET réel ou même demi, juste deviner de l'expérience avec d'autres toolchains) Et que system.dll a tous les mêmes dépendances dans les mêmes versions? Et dans un JIT, la VM peut aussi faire des choses. La VM n'est pas appelée un _compiler_ JIT pour rien. –

Questions connexes