C# 后台应用程序-不带窗体的Windows服务或窗体应用程序

C# 后台应用程序-不带窗体的Windows服务或窗体应用程序,c#,C#,我想为自己创建一个应用程序,用于监控使用不同程序(浏览器、MS office等)所花费的时间。。。并每隔x秒将收集的数据保存到数据库中 经过一些研究,我找到了两种解决方案:Windows服务或Windows窗体应用程序,没有任何窗体类型的后台进程 我理解Windows服务和普通应用程序之间的基本区别。问题是,考虑到RAM/CPU效率,您会提出什么建议,以及为什么不使用一种或另一种解决方案可能有哪些关键方面 谢谢Windows服务和Windows窗体应用程序之间的最大区别在于Windows服务没有

我想为自己创建一个应用程序,用于监控使用不同程序(浏览器、MS office等)所花费的时间。。。并每隔x秒将收集的数据保存到数据库中

经过一些研究,我找到了两种解决方案:Windows服务或Windows窗体应用程序,没有任何窗体类型的后台进程

我理解Windows服务和普通应用程序之间的基本区别。问题是,考虑到RAM/CPU效率,您会提出什么建议,以及为什么不使用一种或另一种解决方案可能有哪些关键方面


谢谢

Windows服务和Windows窗体应用程序之间的最大区别在于Windows服务没有GUI或用户界面

您需要问自己的是,您希望这个过程只是在后台运行并将信息转储到数据库中,还是需要某种用户交互

如果在程序运行时需要用户界面或一些用户交互,那么Windows窗体应用程序会更好。如果你想让它在后台安静地完成它的工作,那就使用服务。此外,服务可以通过Windows安静启动,您可以限制可以卸载该服务的用户的访问权限

就内存或CPU使用而言,服务消耗的内存会更少,因为Windows窗体应用程序必须为至少一个窗体(主GUI窗体)分配内存。即使你隐藏了这个表单,它仍然在内存中,只是在桌面上看不到而已


根据您在问题中指定的要求,我将使用Windows服务。

RAM/CPU几乎相同

但假设其中一个需要另一个K内存,但另一个是否需要另一个20纳秒运行。。。这会给你带来什么变化?如果它会-确定您可以接受哪些值,然后,如果程序占用太长/太多内存-配置占用大部分CPU时间/内存的内容-并对其进行优化。。。这不是一个赢取表单应用程序或赢取服务的程序

Win服务调试put调试器会稍微困难一些。启动或调试器。开始时中断。。。在这里问题解决了


但我更喜欢一个双赢的服务。。。我不明白为什么把win forms应用程序放在没有表单的地方。。。这就像一辆没有轮子的汽车,因为你需要一个引擎。。。为什么不直接使用引擎?!为什么不使用一个设计为在后台运行的引擎,您可以控制它何时启动或为什么启动,它拥有什么权限等等?

如果您只想在应用程序上花费时间,我认为这就是特定可执行文件运行的时间量,那么Windows服务肯定是一个不错的选择。我唯一要提醒您的是,特定可执行文件在特定概要文件下运行的时间并不一定代表使用它的时间。当然,应用程序可以运行并最小化。在这种情况下,您的录音机将显示正在使用的应用程序,而实际上它并未被使用

我个人觉得Windows服务比WinForms更容易编写。但是,这是个人意见的问题

祝你好运


Z

如果它应该全天候运行,那么windows服务。您计划如何将这些统计信息传达给程序?Windows服务对当前登录用户的配置文件几乎没有访问权限。实际上,不允许任何交互。来自MSDN关于服务:Windows服务应用程序运行在与登录用户的交互站不同的窗口站。窗口站是一个安全的对象,它包含一个剪贴板、一组全局原子和一组桌面对象。有关更多信息,请参阅此链接@zugzwang-在我回答下面的评论中,我建议他考虑一下Windows服务中托管的WCF服务。我看到了,但你的回答中没有包括这一点。您的回答意味着可以将其编写为一个直接的Windows服务,我完全不同意这种说法。但是,当然,这取决于他打算如何传达这些统计数据。这个后台应用程序应该只查找打开和运行的应用程序,并将数据存储到数据库中,绝对不需要用户交互。来自数据库的数据将使用另一个应用程序win forms或web应用程序显示给用户。正如您所说,此应用程序应尽可能安静。将有另一个应用程序显示数据。是的,服务听起来不错。你想考虑的第三个选项是A。这将允许其他程序(如GUI Windows应用程序)与您的Windows服务通信。从长远来看,这将使以后编写GUI程序更容易收集统计数据之类的信息。