我正在使用Microsoft SQL Server 2008.
我有一个看起来像这样的表:
|======================================================|
| RespondentId | QuestionId | AnswerValue | ColumnName |
|======================================================|
| P123 | 1 | Y | CanBathe |
|------------------------------------------------------|
| P123 | 2 | 3 | TimesADay |
|------------------------------------------------------|
| P123 | 3 | 1.00 | SoapPrice |
|------------------------------------------------------|
| P465 | 1 | Y | CanBathe |
|------------------------------------------------------|
| P465 | 2 | 1 | TimesADay |
|------------------------------------------------------|
| P465 | 3 | 0.99 | SoapPrice |
|------------------------------------------------------|
| P901 | 1 …Run Code Online (Sandbox Code Playgroud) 我编写了一个进程监视器命令行应用程序,它将参数作为参数:
该程序的作用是使用传递的名称或pid监视所有进程,如果它们的CPU使用率超过阈值%,则会杀死它们.
我有两个班:
ProcessMonitor和ProcessMonitorList
前者,包裹着System.Diagnostics.PerformanceCounter
后者是一个IEnumarable允许前者的列表式结构.
程序本身工作正常,但如果我在任务管理器上观察内存使用情况,它会以每秒约20kB的增量增长.注意:程序PerformanceCounter每秒轮询一次CPU计数器.
该程序需要在使用频繁的服务器上运行,并且正在监视大量进程.(20-30).
我使用PerfMon监视进程的私有字节数与所有堆中的字节总数,并根据下面引用的文章中提供的逻辑,我的结果表明,在波动时,值仍然在可接受的范围内,并且因此没有内存泄漏:
文章
我还使用FxCop来分析我的代码,并没有提出任何相关的内容.
不好意思只是说,哦,然后没有内存泄漏,我进一步调查,并发现(通过调试)以下代码行演示泄漏发生的位置,箭头显示确切的行.
_pc = new PerformanceCounter("Process", "% Processor Time", processName);
Run Code Online (Sandbox Code Playgroud)
以上是启动_pc的地方,并且是我ProcessMonitor班级的构造函数.
以下是导致内存泄漏的方法.这个方法每隔一秒从我的主要调用.
public float NextValue()
{
if (HasExited()) return PROCESS_ENDED;
if (_pc != null)
{
_lastSample = _pc.NextValue(); //<-----------------------
return _lastSample;
}
else return -1;
}
Run Code Online (Sandbox Code Playgroud)
这向我表明该NextValue()方法内部存在泄漏,该泄漏存在于System.Diagnostics.PerformanceCounter类中.
我编写了一个在命令行上运行的工具.
我可以在我的机器上的命令行上测试它,它工作正常.
然后我远程进入目标服务器机器并在那里的命令行上运行它,它仍然有效.
但是 ......这个工具需要继续运行(它是一个监控工具).
我不能让我的远程会话长时间打开,因为其他人需要使用它,当我关闭远程会话时,该命令行工具结束.
我不知道如何,并希望避免需要,写一个Windows服务,但基本上我需要这种能力.我需要几乎用命令行工具包装一个Windows服务,当我断开连接时,该服务可以继续在目标机器上运行.
任何人都可以提供有关如何做到这一点的任何见解/策略?
编辑:以下
两个帖子都很有帮助.