我想检查一下我服务中的内存泄漏问题.我试过以下一组perfmon计数器.
我在这里提到了上面的集合
还提到以下集:
我在这里提到了上面的集合
是否有任何参数/标准或任何其他最佳方法来识别内存泄漏的perfmon计数器?
任何人都可以建议我使用一组计数器来检查内存泄漏吗?或以上设置涵盖内存泄漏?
performance memory-leaks perfmon performancecounter memory-leak-detector
如何获取进程发送/接收字节?首选方法是使用C#.
我搜索了很多,我没有找到任何简单的解决方案.一些解决方案建议在机器上安装WinPCap并使用此lib.
喜欢这个人问:在托管代码中需要"具有网络活动的进程"功能 - 就像resmon.exe一样, 我不想要lib的开销.
有一个简单的解决方案吗?实际上我想要Windows资源监视器在"带网络活动的进程"选项卡下提供的确切数据:
Windows的资源监视器如何获取此信息?任何例子?
此外,尝试使用此处提到的计数器方法: 发送/接收的网络丢失 但没有成功 - 因为并非每个进程都显示在此计数器下.而且我想知道资源监视器如何在不使用此计数器的情况下获取此信息...
我正在为我的c#项目添加一些性能计数器,并创建一个新的PerformanceCounterCategory.在这个类别中,我想有多个计数器/计时器来跟踪不同的事情.我需要使用多个平均计时器,并尝试了解当CoutnerCreationDataCollection中有多个时,AverageBase计数器如何与正确的AverageTimer32计数器关联.
几个问题:
1.首先,这是一个正确的方法吗?我发现的样本都只有一个平均计时器.
2.如果第一个问题的答案是肯定的,那么我认为第一个AverageBase计数器是在AverageTimer32之后添加到集合中的吗?我确实在文章中找到了一个需要按顺序添加的参考.
这是我想要做的一个例子:
var dataColl = new CounterCreationDataCollection
{
new CounterCreationData
{
CounterType = PerformanceCounterType.AverageTimer32,
CounterName = "AverageTime1",
CounterHelp = "AverageTime1_Help"
},
new CounterCreationData // Does this get linked to AverageTime1 simply
// because it is being added after it?
{
CounterType = PerformanceCounterType.AverageBase,
CounterName = "AverageTime1Base"
},
new CounterCreationData
{
CounterType = PerformanceCounterType.AverageTimer32,
CounterName = "AverageTime2",
CounterHelp = "AverageTime2_Help"
},
new CounterCreationData
{
CounterType = PerformanceCounterType.AverageBase,
CounterName = "AverageTime2_Base"
},
}
PerformanceCounterCategory.Create(
"MyCategoryName"
, "My Category Help" …Run Code Online (Sandbox Code Playgroud) Windows具有性能计数器基础结构.操作系统提供了一些常用的计数器,我可以添加自己的计数器.Linux/Unix中的相应概念是什么?
我正在尝试在性能计数器中编程到我的C#应用程序中,该应用程序启动另一个进程并检查该已启动进程的处理器使用情况.据我了解,性能计数器类要求我分配一个类别名称,一个计数器名称和一个进程名称.我可以很容易地得到进程名称,但是在互联网上是否有某种类型的列表,其中包含我可以分配的所有可能的类别和计数器名称?我试着在MSDN上搜索这样的东西,但我没有找到任何东西.
感谢您的帮助!
如何获取C#中的所有进程列表,然后获取每个进程当前内存和CPU消耗?
示例代码非常感谢.
我正在尝试将我的性能计数器组和计数器本身的验证和创建从我的Web服务移到部署期间运行的PowerShell脚本中.
可以这样做吗?或者我是否坚持使用一个简单的应用程序来构建组和计数器?
非常感谢 :)
我正在努力加快编译我的应用程序所花费的时间,而我正在调查的一件事是检查哪些资源,如果有的话,我可以添加到构建机器以加快速度.为此,我如何确定是否应该投入更多的CPU,更多的RAM,更好的硬盘或者该进程是否受到其他资源的约束?我已经看到了这个(如何检查应用程序是cpu绑定还是内存绑定?)并且我正在寻找更多提示和指针.
到目前为止我尝试过的:
在构建计算机上与本地计算机上的进程计时.我发现构建机器需要的时间是我的机器的两倍.
运行"资源监视器"并查看进程运行时的CPU使用率,内存使用情况和磁盘使用情况 - 在执行此操作时,我无法解释数字,主要是因为我不明白每个列的含义以及转换为虚拟机与物理盒以及多CPU盒的含义.
windows performance resources performancecounter virtual-machine
好的,所以我基本上试图创建一个已安装的性能计数器类别列表,就像你在PerfMon中获得的那样.为此,我正在使用
System.Diagnostics.PerformanceCounterCategory.GetCategories()
Run Code Online (Sandbox Code Playgroud)
这看起来很有效,直到你检查清单,并发现有些东西丢失了.我发现缺少的第一个是ReadyBoost Cache.这是因为该项目设置为在"x86"上编译.将此更改为"任何CPU"修复了该问题.
然而,仍然有一些缺失,例如,其中一个测试机器有一个"授权管理器应用程序"类别(我的没有,似乎没有人知道原因,或者它来自哪里)但是,在那台机器上,性能计数器类别显示在PerfMon中,但在GetCategories()从C#调用方法时则不显示.
有谁知道为什么?有更可靠的方法PerformanceCounterCategories吗?这是因为我正在使用.Net吗?我可以使用一些原生API吗?
编辑
对不起,我还是不明白.我编写这段代码或许可以更好地说明它:
using System;
using System.Diagnostics;
using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.Win32;
namespace PccHack
{
class Program
{
private static readonly Regex Numeric = new Regex(@"^\d+$");
static void Main(string[] args)
{
var pcc1 = PerformanceCounterCategory.GetCategories();
Console.Out.WriteLine("Getting automatically from the microsoft framework gave {0} results.", pcc1.Count());
string[] counters;
using (var regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009"))
{
counters = regKey.GetValue("Counter") as string[];
}
var pcc2 = counters.Where(counter => !Numeric.IsMatch(counter)).ToList();
pcc2.Sort();
Console.Out.WriteLine("Getting manually from …Run Code Online (Sandbox Code Playgroud) c# ×5
performance ×5
.net ×4
perfmon ×2
windows ×2
cmd ×1
cpu-usage ×1
etw ×1
linux ×1
memory-leaks ×1
msdn ×1
networking ×1
powershell ×1
process ×1
resources ×1
unix ×1