Wahl zwischen Win32 APIs und .NET Framework

8

Ich muss eine Anwendung für Windows entwickeln, die es ermöglicht, die Maus über eine Webcam zu steuern, indem man Handgesten erkennt. Ich werde vc ++ 2008 für die Entwicklung verwenden. Aber ich bin verwirrt, ob ich mit .NET Framework oder Core Win32 APIs gehen soll. Leistung ist sehr wichtig für meine Anwendung. Laut dem Buch "Visual C ++ 2008 beginnen" von Ivor Horton, gibt es eine kleine Leistungseinbuße bei der Verwendung von .NET Framework. Ich wollte wissen, von welchen Faktoren die Strafe abhängt und ob es möglich sein wird, .NET Framework für meine Anwendung zu verwenden.

    
nishant 06.09.2010, 14:47
quelle

5 Antworten

15

Wenn Sie mit der Win32-API vertraut sind, gehen Sie zur Win32-API. Es ist die natürliche Wahl in Ihrem Fall, da der Großteil Ihres Quellcodes Videoaufnahme, Bildverarbeitung, Algorithmen und Schnittstellen zur Maus in Windows sein wird. Wenn Sie an der Leistung interessiert sind, sollten Sie näher an der Hardware sein und dicke Schichten wie .NET vermeiden.

Ich glaube, dass .NET für komplexe Geschäftsanwendungen nicht für Echtzeitanwendungen oder Gerätetreiber geeignet ist.

    
mmonem 06.09.2010, 15:08
quelle
7

Es sei denn, Sie sind ein sehr erfahrenes C ++, Programmierer, C # ist eine viel produktivere Sprache (spricht als jemand mit über 15 Jahren C ++ Erfahrung und 2 Jahren C #).

Die .Net-Bibliotheken bieten eine Fülle von qualitativ hochwertigen Funktionen, die einfacher zu verwenden sind als die Standard-C ++ - Bibliothek.

Also würde ich mit .Net gehen.

Ich empfehle auch, C ++ / CLI zu verwenden, um komplexe native Bibliotheken direkt aufzurufen, wenn Sie sie integrieren müssen, anstatt P / Invoke. Das ist gut für ungerade Aufrufe, aber Sie können nicht einfach auf Datenstrukturen zugreifen oder nativen und verwalteten Code mischen.

    
Andy Dent 06.09.2010 21:36
quelle
2

.NET eignet sich für GUIs und für die allgemeine Programmierung in nicht leistungsintensiven Bereichen. Wenn Sie mehr als nur eine einfache GUI benötigen, würde ich vorschlagen, zumindest diesen Teil in einer .NET-Sprache zu schreiben.

In dem, was Sie über Ihr Programm beschrieben haben, wird das Erkennen von Handgesten der einzige rechenintensive Teil sein. Der eigentliche Prozess der Maussteuerung ist trivial. Solange der Gestenerkennungsteil für Ihre Bedürfnisse gut genug ist, ist es wahrscheinlich egal, wofür der Rest des Programms geschrieben ist.

Im ersten Schritt sollten Sie herausfinden, welche Bibliotheken es gibt, die Gestenerkennung oder ähnliche Bildverarbeitung durchführen. (Ich würde hoffen, dass Sie diesen Teil sowieso nicht von Grund auf neu schreiben wollen.) Wenn Sie .NET-basierte Bibliotheken finden, die behaupten, dass die Leistung für Ihre Bedürfnisse gut genug ist, dann könnten Sie sie ausprobieren. Andernfalls würden Sie wahrscheinlich mit einer Bibliothek auf C oder C ++ oder ähnlichem enden. Wie auch immer, es ist möglich, so etwas mit einem .NET-basierten Programm zu integrieren.

    
TheUndeadFish 06.09.2010 16:42
quelle
2

Ich denke, Sie sollten .NET-Nutzung für die GUI-Erstellung begrenzen.Rest der Arbeiten versuchen, in Win32 zu tun. Bleibt die Frage über die Objekterkennung, gibt es eine nette Bibliothek namens OPENCV (Open Source Computer Vision Library). Diese Bibliothek enthält alle möglichen Methoden, die Sie im Projekt benötigen würden. Außerdem gibt es Intels Hardware-spezifische Bibliothek, IPP, die die Leistung von Opencv steigert.

    
White Dwarf 06.09.2010 18:06
quelle
1

Kurz gesagt: Der Leistungsunterschied zwischen der nativen API und .Net kann durch den Kauf eines teureren Prozessors ausgeglichen werden. Sie würden zwischen $ 1 und $ 100 mehr zahlen, wobei $ 10 eine vernünftige Schätzung ist - natürlich pro CPU. Wenn Sie also mehr als eine Million Benutzer erwarten, wählen Sie die native API. Wenn Sie erwarten, dass Sie es auf 2-3 Demo-PCs verwenden, spielt das überhaupt keine Rolle.

    
MSalters 06.09.2010 15:14
quelle

Tags und Links