微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决在C#Windows服务处理泄漏

我有一个在Windows Server 2008上运行的C#编写的.NET 4 Windows服务,使用PerfMon进行监视时,每小时消耗2500个句柄。 “处理计数”柜台不断攀升。

当我select“显示未命名的句柄和映射”选项时,使用ProcExp查看句柄时,会列出数千个“事件”和“信号量”句柄。 大多数似乎没有名字。 我查看了源代码,并没有显式使用AutoResetEvent或ManualResetEvent。

私人字节计数器攀升和下降。 我没有看到这个过程几个小时,但是会在一夜之间被监控。

该服务在远程服务器上运行,所以我不能直接附加一个debugging器,并可能不得不转储该过程并使用WinDBG或类似的分析。

阅读,添加删除.NET中的Windows用户

使用Rx同步两个stream

Linux命令在使用SharpSSH库时不能从.NET执行

是否有可能确定哪个进程启动我的.Net应用程序?

如何通过键查找/检查字典值

是否有可能find一个句柄,并找出它指向什么和/或什么可能“拥有”它? 如果这样怎么样?

在回应评论时,以下是该服务的总结。

承载一些WCF服务

承载一个Quartz.NET调度器的实例

托pipe一个工作项目队列(石英工作将工作项目推送到队列上,而不是自己做长时间的工作)

托pipe一个工作项目执行者(工作项目在一个定时器上出队并从Quartz开始执行)

托pipe一个自定义的cachingpipe理器(它做了很多的ADO.NET工作)

在单人devteam(.NET平台)中进行版本控制,部署和持续testing

如何获取mscorlib.ni.lib(.Net Framework 3.5)的PDB文件

在C#中确定正版Windows安装

强制.NET的Windows应用程序。 以英文forms显示数字

性能ListView.click与Button.Click

故障排除的基本概念是隔离。 隔离的过程和状态。

你需要做的第一件事是在你控制的环境中重现问题。 尝试在你的开发机器上进行设置,如果在开发环境中需要很长时间才能建立服务,可以考虑把它们嘲笑一下。

一旦你在控制环境,你可以开始削减正在执行的代码,通过嘲笑或扼杀它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐