c++ windows 服务是不是比 .Net windows 服务更稳定?
Posted
技术标签:
【中文标题】c++ windows 服务是不是比 .Net windows 服务更稳定?【英文标题】:Is a c++ windows service more stable than a .Net windows service -?c++ windows 服务是否比 .Net windows 服务更稳定? 【发布时间】:2012-04-25 14:25:43 【问题描述】:我只是想知道是否有任何技术/理论原因使 Windows NT 服务比使用 c++ 而不是 .Net 应用程序创建的更稳定,反之亦然。
实际上,我有两个 Nt 服务,一个是用 cpp 制作的,另一个是用 .Net 应用程序制作的。我观察到两者都显示在启动模式下,但我需要经常(平均每 2 天一次)重新启动由 .Net 创建的服务才能做出响应。当我试图了解 .Net 服务的这种奇怪行为时,我的一些朋友提出了与操作系统内部相关的答案,有人说 .Net 就是这样构建的。我完全不知道 .Net 平台,所以找到这个论坛的原因是我的尝试之一。
谢谢
阿尼尔
【问题讨论】:
哪种方式更稳定? 两者都和程序员创建的一样稳定 使用 C++(如果它是本机的)可能会比使用 .NET 获得一些性能,但这只是在启动期间。一旦它们都启动并运行,应该不会有太大区别。 虽然没有提到服务(几乎无关紧要),但这基本上是previous question about C# vs. C++的副本 曾在一个使用非常高性能用 C++ 和 .NET 编写的 Windows 服务的组织工作,.NET 服务的缺点之一是垃圾收集可能会启动意外并使服务无响应几秒钟。通过仔细设计您的服务,您应该能够避免这个问题,但它可能不是微不足道的。另一方面,C++ 服务通常更难编写,如果编写不当会泄漏内存、以疯狂的方式崩溃并且难以维护。 【参考方案1】:与使用 .NET 相比,使用 C++(如果它是本机的)可能会获得一些性能,但这只是在启动期间。一旦它们都启动并运行,应该不会有太大区别。
但是,通过本机 C++(据我现在所记得的)创建服务真的很痛苦,而且花费了相当多的时间。使用 .NET,它更容易、更快捷。老实说,我从来不需要创建一些超级重要的高速服务。我在 .NET 中创建了许多服务,它们成功地完成了工作。在这些情况下,业务最终结果比实际绩效更重要。
这真的都是你的需求,但正如评论中有人所说,服务会像程序员写的一样稳定。如果您更愿意在 .NET 中创建用于控制核反应堆的服务,请在 .NET 中进行。 :-)
【讨论】:
【参考方案2】:C++ 服务或任何 win32 可执行文件将继续在多个版本的 Windows 上工作,包括未来和过去。这使 win32 的寿命和几乎不受服务器更改的影响。您的 C++ 服务可能不会对服务器上安装的任何内容有太多或根本没有依赖项。这减少了故障点的数量。
.Net 应用程序非常脆弱,修复失败的 .net 应用程序可能需要花费大量资金。脆弱性来自应用程序对安装在服务器上的 .net 框架版本的挑剔。 Microsoft 在 .net 版本上的生命周期很短。 .Net 有很多依赖项会增加故障点,例如大量的程序集文件和敏感的配置文件。
总之,由于win32的稳定性和依赖少得多,C++/Win32会更加稳定。
【讨论】:
以上是关于c++ windows 服务是不是比 .Net windows 服务更稳定?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 VB.NET 中使用 DeviceIoControl 进行文件枚举比在 C++ 中更快?