2010-09-06 52 views
8

我必須開發一個windows應用程序,通過識別手勢來控制鼠標通過網絡攝像頭。我將使用vC++ 2008進行開發。但我很困惑是否要使用.NET框架或核心的win32 API。性能對於我的應用程序非常重要。根據Ivor Horton撰寫的「Beginning Visual C++ 2008」一書,使用.NET框架有一個小的性能損失。我想知道懲罰所依賴的所有因素,並且爲我的應用程序使用.NET框架將是可行的。在win32 API和.NET框架之間的選擇

+1

你能量化「表現」嗎?即你需要什麼幀率?等等。只有使用這些信息,您才能做出明智的決定*(「實時」不是一個好答案。)*。 – Rusty 2010-09-06 20:20:39

回答

15

如果你熟悉Win32 API,那麼去Win32 API。這是您的情況的自然選擇,因爲您的大部分源代碼都是視頻捕獲,圖像處理,算法以及Windows中的鼠標接口。當您對性能感興趣時,應儘量避免使用像.NET這樣的厚層硬件。

我相信.NET是用於複雜的業務應用程序不適用於實時應用程序或設備驅動程序。

1

一種快速的方式來說明:原生API和.Net之間的性能差異可以通過購買更昂貴的處理器來彌補。你當然會花費1美元到100美元之間的費用,10美元是一個合理的估算值。因此,如果您希望有超過一百萬用戶,請選擇本地API。如果你希望在2-3個演示電腦上使用它,那真的沒什麼關係。

+5

我不同意這一點。通過購買更昂貴的處理器可以提高性能,但是不會彌補原生API和.Net之間的差異。在更快的處理器上,本地API和.Net之間的性能差異將是相同的。今天購買更快的處理器來解決性能問題並不能保證你明天就能解決你的性能問題。 – Patrick 2010-09-06 16:17:16

+0

問題是,您的應用程序需要什麼性能。在這種情況下,獲得最佳性能不是重點。網絡攝像頭,USB和用戶識別它是有限制的。 – dyp 2010-09-06 17:20:27

+0

我想這也可以說是花在開發上。一個可憐的Win32開發人員將編寫一個緩慢而乏味的應用程序,與使用.NET的頂尖開發人員相比,該應用程序可能運行速度要慢很多倍。 – Brain2000 2015-01-20 18:49:10

2

.NET非常適合圖形用戶界面和非性能密集型領域的一般編程。如果您需要做的不僅僅是一個簡單的GUI,我會建議至少使用.NET語言編寫該部分。

在你描述你的程序中,識別手勢將成爲唯一的計算密集型部分。控制鼠標的實際過程是微不足道的。所以只要手勢識別部分能夠滿足您的需求,它可能不會影響程序的其他部分。

第一步,您應該研究哪些庫用於做手勢識別或類似的圖像處理。 (我希望你不打算從零開始編寫這個部分)。如果你發現任何基於.NET的庫聲稱性能足夠滿足你的需求,那麼你可以試試看。否則,你最終可能會得到一個基於C或C++或類似的庫。無論哪種方式,都可以將這樣的東西與基於.NET的程序集成在一起。

2

我認爲你應該限制.NET構建GUI的用法。在Win32中,作品的嘗試嘗試做的事情。 關於物體識別的剩餘問題,有稱爲OPENCV(開源計算機視覺庫)的漂亮庫。這個庫包含了你在項目中需要的所有可能的方法。還有英特爾的硬件專用庫IPP,可以提升Opencv的性能。

7

除非你是一個非常經歷 C++,程序員,C#是一個更富有成效的語言(說有人擁有超過15年的C++經驗,2年C#)。

.Net庫提供了豐富的高質量功能,比標準C++庫更易於使用。

所以,我會去使用.Net。

我還推薦使用C++/CLI直接調用複雜的本地庫,如果必須集成它們而不是P/Invoke。這對於奇數調用很有用,但不會讓您輕鬆訪問數據結構或混合本機代碼和託管代碼。