2011-09-24 7 views
6

J'ai entendu dire qu'un logiciel android peut être développé en utilisant C#. (monodroid)Monodroid est-il plus lent?

Mais quand je le recherche, quelqu'un a indiqué qu'il serait plus lent à fonctionner.

Qu'en pensez-vous? Est-ce que c'est réel? Est-ce efficace en utilisant C#?

+0

duplication possible de [MonoDroid VS Java dans le développement android?] (Http://stackoverflow.com/questions/5951673/monodroid-vs-java-in-android-development) –

Répondre

18

Nous ne savons pas.

En toute sincérité, il serait très pratique si quelqu'un pouvait porter l'application Android Linpack sur Mono pour Android afin que nous puissions comparer les performances entre les deux.

Voici ce que je fais savoir:

  • Il y a une surcharge de pénalité de démarrage actuellement ~ 3s lors du premier chargement de l'application sur un G1 (votre kilométrage varie en fonction du matériel). Ceci est dû à l'initialisation du runtime Mono et au chargement des assemblages référencés. Nous voulons améliorer cela à l'avenir.
  • Mono, et Mono pour Android, JITs tout. Dalvik, quant à lui, a un JITcache de taille variable (actuellement 1MB sur ARMv7) et un interprète, donc en fonction de votre application il est possible (probable) que tout ne soit pas coupé.
  • Mono pour Android utilise JNI pour appeler le code Android/Java.

Ensuite, il y a koush's performance comparsion between Mono and Dalvik in 2009. Ceci est antérieur au JIT de Dalvik, mais sur un matériel identique, Mono était fessée Dalvik.

Alors qu'est-ce que tout cela signifie? Je n'ai absolument aucune idée. (Encore une fois, un port de Linpack Mono pour Android serait merveilleux hint hint, nudge nudge!)

Cela dit, il y a quelques conseils de performance pour suggérer:

  1. Use a splash screen during app startup. Ceci fournit une rétroaction immédiate au cours démarrage de l'application, qui est ce que la plupart des utilisateurs se soucient.
  2. Si possible, minimisez les transitions entre le code mono et Java. JNI ne gagnera jamais de médailles de performance, donc si vous pouvez faire plus de code en Mono sans appels intermédiaires aux méthodes Java, faites-le.
  3. Réduisez le nombre d'instances Java.Lang.Object maintenues actives simultanément. Les références GC croisées peuvent entraîner des problèmes de performances.