Quels sont les avantages pour le développement d'une application Win32 en C ++ sur une application .NET en C #?

StackOverflow https://stackoverflow.com/questions/562620

Question

J'ai appris les fenêtres de programmation en utilisant Visual C ++ et l'API Win32. De nos jours, il semble que la plupart des applications sont développées en .NET en C #. Je comprends que la plupart du temps il n'y a pas beaucoup de différence de performance entre le code natif et le code managé. Je me demande donc, si je devais commencer à écrire une nouvelle application de bureau aujourd'hui, est-il une raison quelconque (autre que le fait que je suis plus familier avec C ++), que je pourrais vouloir l'écrire dans non gérés C ++ au lieu de .NET? Y at-il encore des avantages à utiliser C ++ et le code natif? Ou cette méthode a été plus ou moins remplacé par .NET sur la plate-forme Windows?

Bien sûr, je sais que les gens qui écrivent des pilotes de périphériques à faible niveau et des programmes similaires ne le feraient pas dans .NET. Je demande en ce qui concerne les applications typiques avec les clients qui ne font pas les appels matériels directs.

Était-ce utile?

La solution

  • Performance (certaines situations, telles que les graphiques)
  • empreinte mémoire (comme Mancuso dit)
  • Utilisation des bibliothèques existantes
  • Pas besoin d'un moteur d'exécution
  • Un contrôle plus précis

Pour lister quelques-uns.

Cependant, vous pouvez également regarder la question de l'angle opposé d'évaluer assez la langue à utiliser.

En outre, vous pouvez utiliser C ++ / CLI pour incorporer à la fois le code natif et .net.

Autres conseils

OMI le plus important pour les petites applications téléchargeables est que le code natif n'a pas besoin de temps d'exécution .NET. Alors que le haut débit devient de plus en plus fréquente presque tout le monde n'a pas encore.

Certaines personnes peuvent être déçus de voir que votre application 2 Mo nécessite en fait une autre 20 Mo de téléchargement-cadre et un processus d'installation gênant pour fonctionner. Si elles ne savent pas si oui ou non ils ont vraiment besoin de votre demande en premier lieu, ils pourraient tout simplement le supprimer avant même donner un essai et se tourner vers un produit concurrent.

Si votre application doit pouvoir fonctionner sans une installation (si vous ne pouvez pas ou ne devrait pas faire quelque chose comme installer le framework .NET), vous ne pouvez pas compter sur .NET étant sur une machine Windows ( pré-Vista). Beaucoup d'applications de services publics peuvent tomber dans cette catégorie.

Je recommande pour écrire toutes les applications de bureau code managé . # .NET / C est une grande plate-forme pour le faire.

Mes raisons:

  1. pénalité de performance est négligeable . Google pour repères si vous ne prenez pas ma parole. Ce qui importe plus est le code lui-même. Vous pouvez écrire O (n ^ m) algorithmes en C ++ ou .NET / C #. Les moteurs JIT sont très mature ces jours-ci.
  2. Unmanaged C ++ présente des inconvénients majeurs en matière de les tests unitaires, et se moquant refactoring . Il est très lourde et rigide. La réflexion permet le code a réussi à faire des choses très pratique.
  3. Le déploiement est un petit problème. Cependant, la création d'une configuration qui vérifie les conditions .NET nécessaires et les installe automatiquement est une évidence.
  4. La compilation est plus rapide, pas éditeur de liens ! Il arrive même en arrière-plan lorsque vous modifiez le code.
  5. .NET support de bibliothèque est bien meilleur et plus propre que STL, MFC et boost.
  6. Aucun d'en-tête et macros . Ils sont juste erreurs.
  7. Sécurité ! De bons débordements de tampon bye, mauvais pointeurs, variables non initialisées ...
  8. Exceptions . hiérarchie d'exception claire dans .NET. Les exceptions C sont embrouillés.

empreinte mémoire. Mais à moins que vous développez pour une machine à sévèrement handicapé-sage mémoire, il ne devrait vraiment pas être un problème pour la plupart des applications.

Si vous pouvez vous permettre la dépendance sur la pile, optez pour .NET Moderne, élégant, puissant et par conséquent beaucoup plus rapide à développer pour.

Mais réalisez que vous enchaînez votre application à elle -. À la langue et le cadre, si vous FORSEE un avenir où vous pouvez échapper à cela, alors mieux réfléchir à deux fois

Win32 est vieux et maladroit, mais il fonctionne sur pratiquement toutes les versions de Windows sans dépendances supplémentaires, et votre code peut être simple, portable, C / C ++.

1 pour ne pas avoir à dépendre de paquets .NET / install sur la machine cible (s). Cela reste un gros problème.

Lorsque toutes les machines ont mono ou NET, il ne sera pas un gros problème.

Deux choses que je peux penser.

  1. La protection de la propriété intellectuelle. Il est infiniment plus difficile pour quelqu'un d'ingénierie inverse une application C ++ non géré. Managed applications .Net ou Java peuvent être facilement décompilées ce n'est pas le cas non géré C ++.

  2. Vitesse. C ++ est plus proche de matériel et a une plus petite empreinte mémoire comme l'autre commentaire mentionné. Voilà pourquoi la plupart des jeux vidéo continuent d'être écrit en C ++ et assembleur en ligne.

programmes .Net ont aussi une durée de vie de soutien, où natif ne pas vraiment. Natif se déroulera pendant de nombreuses années à travers différents systèmes d'exploitation sans nécessiter des mises à jour.

.Net programmes peuvent être arrosés par une mauvaise configuration .Net, natif ne cesse de courir et est à peine effectué par des mises à jour OS.

programmes .Net démarrage lent et se sentent lent, natif commence rapide et court rapide.

.Net doit être codé pour le plus petit dénominateur commun (le plus distribué version du framework), natif compile tout le code dans l'application - utilisez donc ce que vous voulez

.

Utilisation de Delphi pour Native, pas C ++. .Net est partiellement basé sur backend Delphi RAD et Java.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top