我正在尝试创建一组自定义性能计数器,供我的ASP.NET应用程序使用。我使用以下代码递增计数器:
internal static void Increment(String instanceName, DistributedCacheCounterInstanceType counterInstanceType)
{
var permission = new PerformanceCounterPermission(PerformanceCounterPermissionAccess.Write, Environment.MachineName, "CounterName");
permission.Assert();
var counter = new PerformanceCounter("CategoryName", "CounterName", instanceName, false);
counter.RawValue++; // Use RawValue++ instead of Increment() to avoid locking
counter.Close();
}
这在单元测试和Cassini的dev box(Vista Business x64)中都能很好地工作,我可以在Performance Monitor中查看计数器的工作情况。但是,计数器似乎没有在我的生产环境(Win Server 2003 x64)中注册任何增量。计数器实例本身是可用的,但它们只显示最后一个/平均值/最小值/最大值的“--”。
你知道我会做错什么吗?
编辑:
这是
a [perhaps somewhat outdated] MSDN article that I used for reference
编辑2:
我正在使用VS2008/.NETFrameworkV3.5SP1,如果这有什么不同的话。
编辑3:
刚刚找到
this article about 32 bit/64 bit app and monitor mismatching
,但我不确定它如何适用于我的情况,如果有的话。卡西尼确实是一个32位的应用程序,但是我在64位系统上查看这些值没有问题。在我的生产服务器上,应用程序和系统都是64位的,但我看不到这些值。
编辑4:
价值观
是
在生产服务器上运行32位perfmon时显示。所以我想现在的问题是为什么我不能读取64位perfmon中的值?
编辑5:
它看起来确实在工作,只是我必须重新启动perfmon实例,因为它在创建计数器之前是打开的。