在win32 API和.NET框架之间进行选择

时间:2010-09-06 14:47:04

标签: .net c++ windows winapi

我必须开发一个Windows应用程序,它可以通过识别手势来控制鼠标通过网络摄像头。我将使用vc ++ 2008进行开发。但我很困惑是否使用.NET框架或核心win32 API。性能对我的应用程序非常重要。根据Ivor Horton撰写的“Beginning Visual C ++ 2008”一书,使用.NET框架会产生很小的性能损失。我想知道惩罚所依赖的所有因素,并且将.NET框架用于我的应用程序是否可行。

5 个答案:

答案 0 :(得分:15)

如果您熟悉Win32 API,请转到Win32 API。这是您自然的选择,因为您的大多数源代码都是视频捕获,图像处理,算法以及Windows中鼠标的接口。当您对性能感兴趣时,请更接近硬件,避免使用像.NET这样的厚层。

我认为.NET适用于复杂的业务应用程序,不适用于实时应用程序或设备驱动程序。

答案 1 :(得分:7)

除非你是非常经验丰富的C ++程序员,否则C#是一种更高效的语言(作为拥有超过15年C ++经验和2年C#经验的人)。

.Net库提供了大量高质量的功能,比标准C ++库更易于使用。

所以,我会继续使用.Net。

我还建议使用C ++ / CLI直接调用复杂的本机库,如果必须集成它们,而不是P / Invoke。这对于奇数调用很有用,但不会让您轻松访问数据结构或混合本机和托管代码。

答案 2 :(得分:2)

.NET非常适合GUI和非性能密集型领域的一般编程。如果您需要做的不仅仅是一个简单的GUI,我建议至少用.NET语言编写该部分。

在你所描述的程序中,识别手势将是唯一计算密集的部分。控制鼠标的实际过程是微不足道的。因此,只要手势识别部分的性能足以满足您的需求,编程的其余部分可能无关紧要。

首先,您应该研究那些做手势识别或类似图像处理的库。 (我希望你不打算从头开始编写那个部分。)如果你发现任何基于.NET的库声称其性能足以满足你的需求,那么你可以尝试一下。否则,您最终可能会得到一个基于C或C ++或类似的库。无论哪种方式,都可以将这样的东西与基于.NET的程序集成。

答案 3 :(得分:2)

我认为你应该限制GUI构建的.NET使用。在Win32中尝试做的工作。 关于对象识别的剩余问题,有一个很好的库叫OPENCV(开源计算机视觉库)。此lib包含项目中需要的所有可能方法。还有英特尔的硬件专用库IPP,它提升了Opencv的性能。

答案 4 :(得分:1)

快速说明一下:本机API和.Net之间的性能差异可以通过购买更昂贵的处理器来弥补。你需支付1到100美元之间的费用,10美元是一个合理的估计 - 当然每个CPU。因此,如果您期望超过一百万用户,请选择本机API。如果您希望在2-3台演示PC上使用它,它根本不重要。