【问题标题】:choice between win32 APIs and .NET framework在 win32 API 和 .NET 框架之间进行选择
【发布时间】:2010-09-06 14:47:04
【问题描述】:

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

【问题讨论】:

  • 你能量化一下“性能”吗?即你需要什么帧速率?..等等。只有有了这些信息,您才能做出明智的决定(“实时”不是一个好的答案。).

标签: .net c++ windows winapi


【解决方案1】:

如果您熟悉 Win32 API,那么请使用 Win32 API。这是您的自然选择,因为您的大部分源代码将是视频捕获、图像处理、算法和 Windows 中的鼠标接口。如果您对性能感兴趣,请靠近硬件,避免使用 .NET 等厚层。

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

【讨论】:

    【解决方案2】:

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

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

    所以,我会使用 .Net。

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

    【讨论】:

      【解决方案3】:

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

      在您所描述的程序中,识别手势将是唯一需要大量计算的部分。控制鼠标的实际过程是微不足道的。因此,只要手势识别部分的性能足以满足您的需求,那么程序的其余部分是用什么编写的可能并不重要。

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

      【讨论】:

        【解决方案4】:

        我认为你应该限制 .NET 用于 GUI 构建。其余的工作尝试在 Win32 中完成。 关于对象识别的剩余问题,有一个名为 OPENCV(开源计算机视觉库)的不错的库。这个库包含您在项目中需要的所有可能的方法。还有英特尔的硬件专用库 IPP,它可以提高 Opencv 的性能。

        【讨论】:

          【解决方案5】:

          简单地说:原生 API 和 .Net 之间的性能差异可以通过购买更昂贵的处理器来弥补。你会多付 1 到 100 美元,10 美元是一个合理的估计——当然是每个 CPU。因此,如果您预计超过一百万的用户,请选择原生 API。如果您希望在 2-3 台演示 PC 上使用它,那真的没关系。

          【讨论】:

          • 我不同意这一点。通过购买更昂贵的处理器,您可以获得性能,但您无法弥补原生 API 和 .Net 之间的差异。在更快的处理器上,本机 API 和 .Net 之间的性能差异将是相同的。今天购买更快的处理器来解决您的性能问题并不能保证您明天就能解决您的性能问题。
          • 问题是,您的应用程序需要什么性能。在这种情况下,获得最大性能并不是重点。网络摄像头、USB 和用户识别都有限制。
          • 我想它也可以说是在开发上花费更多。与使用 .NET 的顶级开发人员相比,Win32 中糟糕的开发人员会编写一个缓慢而乏味的应用程序,运行速度可能会慢很多倍。
          猜你喜欢
          • 2010-12-09
          • 2017-08-31
          • 2015-01-07
          • 2021-11-17
          • 2010-10-14
          • 1970-01-01
          • 1970-01-01
          • 2011-02-01
          • 2012-01-16
          相关资源
          最近更新 更多