9
votes

Choix entre les API Win32 et .NET Framework

Je dois développer une application pour Windows qui permettra de contrôler la souris via Web CAM en reconnaissant les gestes de la main. J'utiliserai VC ++ 2008 pour le développement. Mais je suis confus, si vous souhaitez utiliser .NET Framework ou Core Win32 API. La performance est très importante pour mon application. Selon le livre "Début Visual C ++ 2008" de Ivor Horton, il existe une petite pénalité de performance associée à l'utilisation de .NET Framework. Je voulais savoir sur quels facteurs la pénalité dépend de la peine et sera-t-elle réalisable d'utiliser la framework .NET pour ma demande.


1 commentaires

Pouvez-vous quantifier un peu "performance"? I.e. Quel taux de traduction avez-vous besoin? .. etc. Ce n'est qu'avec cette information que vous pouvez faire une décision éclairée ("temps réel" n'est pas une bonne réponse.) .


5 Réponses :


16
votes

Si vous connaissez l'API Win32, allez à Win32 API. C'est le choix naturel de votre cas puisque la majeure partie de votre code source sera la capture vidéo, le traitement de l'image, les algorithmes et les interfaces à la souris dans Windows. Lorsque vous êtes intéressé par la performance, soyez plus près du matériel en évitant des couches épaisses comme .NET.

Je crois que .NET est pour Applications métier complexes pas pour les applications ou les pilotes de périphérique en temps réel.


0 commentaires

1
votes

Un moyen rapide de la mettre: la différence de performance entre l'API native et .NET peut être compensée par l'achat d'un processeur plus coûteux. Vous paieriez quelque part entre 1 $ et 100 $ de plus, avec 10 $ étant une estimation raisonnable - par CPU bien sûr. Donc, si vous attendez plus d'un million d'utilisateurs, choisissez l'API native. Si vous vous attendez à l'utiliser sur 2-3 PC de démonstration, cela n'a pas d'importance du tout.


3 commentaires

Je ne suis pas d'accord avec ça. En achetant un processeur plus coûteux, vous obtenez des performances, mais vous ne compensez pas la différence entre API Native et .NET. Sur le processeur plus rapide, la différence de performance entre l'API native et .NET sera la même. Acheter un processeur plus rapide aujourd'hui Pour résoudre votre problème de performance ne garantit pas que vous pourrez résoudre votre problème de performance demain.


La question est de savoir quelle performance avez-vous besoin pour votre demande? Dans ce cas, ce n'est pas le point d'obtenir une performance maximale. Il y a une limite sur la webcam, USB et l'utilisateur de la reconnaître.


Je suppose que cela pourrait également être dit de dépenser davantage sur le développement. Un développeur pauvre de Win32 rédigera une application lente et fastidieuse pouvant fonctionner plusieurs fois plus lentes par rapport à un développeur de premier ordre utilisant .NET.



2
votes

.NET est agréable pour Guis et pour la programmation générale dans des zones à forte intensité de non-performance. Si vous avez besoin de faire quelque chose de plus qu'une interface graphique triviale, je suggérerais d'écrire au moins cette partie dans une langue .NET.

Dans ce que vous avez décrit de votre programme, la reconnaissance des gestes de la main sera la seule partie de la condition essentiellement intense. Le processus réel de contrôle de la souris est trivial. Ainsi, tant que la partie de reconnaissance de geste fonctionne assez bien pour vos besoins, cela ne comportera probablement pas ce que le reste du programme est écrit.

première étape, vous devriez rechercher quelles bibliothèques diffusent de la reconnaissance de geste ou de traitement d'image similaire. (J'espère que vous n'auriez pas l'intention d'écrire cette partie à partir de zéro.) Si vous trouvez des bibliothèques basées sur .NET qui prétendent avoir suffisamment de performances pour vos besoins, vous pourriez leur donner un essai. Sinon, vous vous retrouveriez probablement avec une bibliothèque basée sur C ou C ++ ou similaire. De toute façon, il est possible d'intégrer une telle chose avec un programme basé sur .NET.


0 commentaires

2
votes

Je pense que vous devriez limiter l'utilisation .NET pour la construction de GUI Building.Rest des œuvres essayez de faire à Win32. Restée Question sur la reconnaissance de l'objet, une belle bibliothèque appelée OPENCV (Bibliothèque Open Source Computer Vision). Cette lib contient toutes les méthodes possibles que vous auriez besoin dans le projet. Il existe également une bibliothèque spécifique du matériel d'Intel, IPP, qui renforce la performance de l'OpenCV.


0 commentaires

7
votes

Sauf si vous êtes un très expérimenté C ++, programmeur, c # est un langage beaucoup plus productif (parlant comme une personne de plus de 15 ans d'expérience C ++ et 2 ans C #).

Les bibliothèques .NET offrent une multitude de fonctionnalités de haute qualité plus faciles à utiliser que la bibliothèque C ++ standard.

Alors, j'irais avec utiliser .NET.

Je recommande également d'utiliser C ++ / CLI pour appeler directement des bibliothèques autochtones complexes si vous devez les intégrer, plutôt que p / invoquer. C'est bon pour les appels étranges, mais ne vous permet pas d'accéder facilement à des structures de données ou à MINGLE Native Code.


0 commentaires