有没有理由在.NET上使用Win32 API(在C或C++中)?

Kiz*_*aru 11 .net api winapi

我正在完成暑期工作,为行李扫描仪编写图形软件.一切都在.NET或MFC中完成,使用普通的C++进行硬件通信(我不做任何硬件工作).我有时使用Win32 API调用(如SendMessage)来提高表单或控件的性能.我只有一年的CS课程(全部用C语言),但我对Win32 API很着迷 - 它比我想象的要大得多,也更强大.

.NET是否只是隐藏了Win32 API的所有"乏味"或底层工作?最终软件在.NET中消耗更多系统资源还是执行速度更慢?

Mhm*_*mmd 8

.NET是否只是隐藏了Win32 API的所有"乏味"或底层工作?最终软件在.NET中消耗更多系统资源还是执行速度更慢?

是的,它试图隐藏所有繁琐的细节.是的,一个.NET应用程序通常会比较慢,而且可能比用C语言编写和Win32类似的应用程序,以消耗更多的资源.

但是,牺牲性能通常是一个可以忽略不计的代价来支付生产力的提高和易维护性.

我知道使用简单的C和纯win32编程如此接近裸机的l33t-ness因素可能看起来非常诱人,但我发现很难证明使用.NET会更容易和更快.

  • 我不知道,约翰.我没有任何性能基准来支持我的主张,相反,我在我看来是一个合理的假设:.NET提供的易用性和精心设计的抽象将通过一些性能损失来支付.我是第一个承认这种假设的性能下降在99%的时间内可以忽略不计或几乎不存在的人,但它仍然存在.我认为我们基本上同意原则,但细节上的分裂:) (2认同)

Joh*_*her 8

.Net通常会使开发变得更加容易.它通过提供一个系统来实现这一点,该系统使开发人员可以减少公共活动的工作量.

我喜欢在.NET工作.在它可用之前,我主要使用MFC和Win32编写的用C++编写的GUI.当我切换到.NET时,我不得不完全修改我的估计,因为我可以更快地完成工作!

回答你的实际问题:有一些不常见的开发场景,.NET没有帮助(有些人可能会说它会妨碍).这些通常涉及低级别使用硬件通信或精细调整的COM编程.

请注意,您可以使用C++ for .NET进行开发,这样您就可以轻松地在Win32和.NET之间进行交叉.(当你开发到CLR时,它不是标准的C++,但也不难发现差异.)

如果没有您可以实际测试的实际场景,请不要考虑性能.有关同一任务的.NET和C++的有趣性能比较,请查看博客条目(和链接!):http://blogs.msdn.com/b/ricom/archive/2005/05/10/416151的.aspx


kbr*_*ton 5

.NET的吸引力在于它是一个更高效的开发平台..NET框架的许多部分都提供了Win32 API的部分包装器.虽然该框架确实抽象了很多"乏味"的Win32 API调用,但这并不能阻止我不时地需要一点PInvoke.

你会发现.NET框架确实涉及一点开销,并不像C或C++那样有效; 然而,通常需要在生产力和效率之间进行权衡.个别申请的要求将决定哪个更重要.在许多软件中,要求是"足够有效",并且可能完全适合.NET开发.

  • 注意通用性能陈述..NET中的基本首次尝试代码可能比类似的C++代码更快,后者甚至对其进行了一些性能调整.(查看我的答案中的链接,了解一些细节.) (2认同)
  • @John:很好.这就是为什么我选择"不像C或C++那样有效"的措辞.我认为它在应用中具有充分的非普遍性. (2认同)
  • 查看http://stackoverflow.com/questions/138361/how-much-faster-is-c-than-c可能会有所帮助,其中包含有关C和C#之间一般性能比较的讨论.正如@John所观察到的那样,可测量的性能差异并不普遍,但我发现,在实践中,它们经常存在. (2认同)

Mar*_*ark 5

对于您的问题的简单答案依次为“否”,“是”和“不一定”。也就是说,.NET所做的不只是“隐藏” Win32 API,在某些情况下,它可以包装它,在其他情况下,可以对其进行扩展,而在其他情况下,则完全忽略它。

用.NET框架开发的软件通常会消耗比专家理论上可能会精简的手工编码程序集更多的资源,但是在许多情况下,C或C ++开发人员将使用那些和.NET框架一样重,两者之间的区别将是洗钱。要考虑的另一件事是,这些天程序是否消耗额外的kb内存通常并不重要。没有人注意。如果在.NET(或任何其他技术)中进行开发的好处胜于风险,那么这是一个更好的选择。只有您可以根据自己的情况告诉您。

至于“性能”,这是一个可怕的大类,但是由于.NET代码是编译为机器语言的(未解释),因此通常没有什么区别。同样,硬代码汇编程序员可能会击败它,但是应用成本效益分析来确定是否值得。