2009-08-15 5 views
3

je les questions suivantes:Performance: compilez VS, Exécuter en Mono sous Windows et Linux

  1. Est-il possible de compiler un projet C# en utilisant VS.NET, et l'exécuter sur mono?
  2. Y at-il des avantages de performance associés à l'approche 1 (par rapport à la compilation avec le compilateur mono)?
  3. Qu'en est-il de l'exécution de la sortie .exe/.dll sous linux? Et quelles sont les caractéristiques de performance associées?

Merci

+1

Avec le mode mono, vous pouvez utiliser la compilation AOT (Ahead Of Time). Cela compilera vos assemblys .NET (avec code IL) en code natif comme celui produit par C++ ou C, ce qui accélérera le démarrage, améliorera les performances de la mémoire et améliorera potentiellement les performances globales. Cependant, il ne fonctionnera que sur l'environnement d'exploitation (OS + x86/x64) sur lequel il est compilé. http://www.mono-project.com/AOT –

+0

Merci pour cette info. – jameszhao00

+0

@C Rogers - donc un peu comme NGEN (juste peut-être avec le GAC) ;-p –

Répondre

8
  1. Oui, vous pouvez le faire. Cela devrait fonctionner à moins que le code n'utilise des éléments de framework qui ne sont pas implémentés en mono.

  2. Pas que je sache.

  3. Vous ne savez pas quelle est la différence entre # 3 et # 1. Si vous faites référence à l'utilisation de mono pour compiler sous Windows, puis de le porter sous Linux, il devrait toujours fonctionner de la même manière. Les deux compilateurs génèrent essentiellement le même code IL.

1

Je ne sais pas sur les performances, mais this article tente de montrer comment compiler l'outil MonoDevelop en contre Cela devrait vous donner une idée de ce que les différences seront.

6

1:
Oui. Les compilateurs se compilent en code IL, qui s'exécute dans l'un ou l'autre système.

Toutes les bibliothèques ne sont pas implémentées dans Mono, mais celles qui le sont devraient fonctionner de manière transparente. En outre, le code doit être écrit à independend du système fonctionne correctement, par exemple:

  • Utilisez Path.DirectorySeparatorChar et Path.Combine pour former des chemins de fichiers, au lieu d'utiliser la chaîne littérale "\" ou "/".
  • Utilisez la classe BitConverter pour effectuer une manipulation d'octets indépendante de l'achitecture big-endian/little-endian.

2:
Il peut y avoir quelques différences dans ce code, les compilateurs génèrent, mais comme la quasi-totalité est fait par l'optimisation du compilateur JIT qui devrait rarement faire une différence mesurable.

3:
Les fichiers exe et dll ne contiennent pas de code natif, ils contiennent du code IL. Le code natif est généré par le compilateur JIT lorsque le fichier exe/dll est chargé.

+0

Je pense que l'EXE/DLL contient le chargeur/lieurs CLR. – jameszhao00

2

Pour développer des réponses autres:

Pour le point 3. Oui, il y aura une différence de performance lors de l'utilisation MSCLR vs Mono, et non, je ne sais pas ce que ce sera. Peut-être que rien, peut-être peu ou peut-être un est beaucoup plus rapide - vous devrez profiler votre application spécifique. Notez également que, malgré la rapidité du code du compilateur JIT, les bibliothèques seront implémentées très différemment et auront certainement des caractéristiques de performances variables.

Si vous envisagez de prendre en charge votre application sous Mono, vous devrez exécuter des tests de performances sur cette page, ainsi que MS CLR.

Questions connexes