.net windows service

本文关键字:service windows net | 更新日期: 2023-09-27 18:32:15

我已经将我的 c# 控制台应用程序创建为 Windows 服务,并将该服务安装在远程服务器中,该服务器是 32 位机器,具有 2GB RAM。连接到此服务器应用程序,许多客户端已连接并从服务器获取数据。问题是有时服务器计算机已关闭并且无法访问数据,此时我们每次都需要重新启动服务器。我无法确定问题到底在哪里。当我在服务器机器中检查偶数日志时,我发现了以下异常,

源 .NET 2.0 运行时错误。

EventType clr20r3, P1 myapplication.exe, P2 1.3.2.1, P3 4cb724a3, P4 mscorlib, P5 2.0.0.0, P6 4be90358, P7 1947, P8 7, P9 system.outofmemoryexception, P10 NIL.

我用谷歌搜索了很多,但找不到确切的原因。 我正在使用HTTPSERVER。用于 url 通信的 MVC(开源)。 要创建以下服务,请在主函数中添加代码。

 ServiceBase[] ServicesToRun;
 ServicesToRun = new ServiceBase[] 
 { 
   new TouchService() 
  };
 ServiceBase.Run(ServicesToRun);

请有人帮帮我。提前致谢

.net windows service

原因是 - 你没有记忆。

在 .Net 中,这并不一定意味着物理上没有更多的内存,它只是意味着 CLR 无法找到足够的连续内存来分配某些内容。这可能是由于已经分配了大量内存,也可能是由于内存碎片。

如果不了解您的应用程序,则很难提供超出一般建议的内容,但一些提示是:

  • 尝试使用 Windows 性能计数器和工具(如进程监视器)监视堆的大小
  • 看看你的代码 - 你是否无限期地坚持引用,并无休止地增加内存的整体大小?
  • 您是否分配了超过 80KB 的任何大型单个内存块,例如大型数据字符串?像这样的大型对象是在大型对象堆上分配的,而不是压缩的,这可能导致碎片和内存不足异常?
  • 您是否尝试过使用内存性能分析器?(我倾向于使用SciTech的.Net内存分析器,但还有其他不错的)。这使您可以启动服务并附加探查器,执行一些工作,拍摄快照,执行更多工作,然后查看快照之间的差异。这是发现内存使用量是否以及为什么在攀升的一种非常有效的方法。
  • 您是否正在执行大量 XML 序列化?除了生成大字符串的倾向(请参阅上一点)之外,在 XmlSerializer 构造函数上使用某些重载还可能导致每次使用新的 xml 序列化 dll 并将其加载到应用程序池中。

这些只是一些随机的想法,但我建议您对 CLR 内存管理和垃圾回收有一个基本的了解,如果您还没有,请尝试一些监视和分析,并批判性地查看您的代码。

理解这一点的唯一可能方法是测量您服务的内存使用情况。将其转换为"普通"应用程序,以及

  • 首先尝试使用进程资源管理器。让你的应用程序遵循 ma 具有繁重工作负载的路径并查看WorkingSet:它如何增长,如果它能够在 GC 执行后恢复其状态(尽可能多地)

  • 使用可用的内存分析器之一(有免费和付费的)

希望这有帮助。