我有一个ASP。NET应用程序,通过创建和写入自定义性能计数器来跟踪统计信息。偶尔,我在错误日志中看到,计数器无法打开,因为它们已经在当前进程中使用过。我想这是由于我。NET应用程序域已在同一w3wp.exe进程中重置。当我的应用程序域被回收时,我如何避免这些错误并重新建立与性能计数器的连接?
柜台建设:
PerformanceCounter pc = new PerformanceCounter();
pc.CategoryName = category_name;
pc.CounterName = counter_name;
pc.ReadOnly = false;
pc.InstanceLifetime =
PerformanceCounterInstanceLifetime.Process;
pc.InstanceName = instance_name;
计数器使用:
pc.Increment()
[2009年3月26日更新]
收到的错误消息为:
实例“_lm_w3svc_1_root_myapp”已存在,其生存期为进程。在将其删除或使用它的进程退出之前,无法重新创建或重用它。
已存在,其生命周期为Process。
我试图通过初始化性能计数器并在瞬态AppDomain中写入其中一个计数器,在控制台应用程序中复制异常。然后,我卸载AppDomain,并在第二个AppDomain中再次执行此操作(同一过程)。他们俩都成功了。我现在不确定确切的原因是什么,我对ASP中AppDomain回收的假设。NET似乎是假的。