小编fun*_*oom的帖子

如何从SQL转置结果集

我正在使用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)

sql sql-server-2008

8
推荐指数
1
解决办法
9528
查看次数

如何解决System.Diagnostics.PerformanceCounter引起的内存泄漏问题

摘要

我编写了一个进程监视器命令行应用程序,它将参数作为参数:

  • 进程名称或进程ID
  • CPU阈值百分比.

该程序的作用是使用传递的名称或pid监视所有进程,如果它们的CPU使用率超过阈值%,则会杀死它们.

我有两个班: ProcessMonitorProcessMonitorList

前者,包裹着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类中.

我的问题:

  1. 这是一个已知的问题,我该如何解决它?
  2. 我的假设是任务管理器的内存使用量增加意味着确实存在内存泄漏问题吗?
  3. 有没有更好的方法来监视特定进程的多个实例,如果它们超过特定的阈值CPU使用率,则关闭它们,然后发送电子邮件?

memory-leaks system.diagnostics

4
推荐指数
1
解决办法
2668
查看次数

如何在远程服务器上运行命令行程序

我编写了一个在命令行上运行的工具.
我可以在我的机器上的命令行上测试它,它工作正常.
然后我远程进入目标服务器机器并在那里的命令行上运行它,它仍然有效.

但是 ......这个工具需要继续运行(它是一个监控工具).
我不能让我的远程会话长时间打开,因为其他人需要使用它,当我关闭远程会话时,该命令行工具结束.

我不知道如何,并希望避免需要,写一个Windows服务,但基本上我需要这种能力.我需要几乎用命令行工具包装一个Windows服务,当我断开连接时,该服务可以继续在目标机器上运行.

任何人都可以提供有关如何做到这一点的任何见解/策略?

编辑:以下
两个帖子都很有帮助.

.net c# command-line windows-services

1
推荐指数
1
解决办法
2100
查看次数