代码之家  ›  专栏  ›  技术社区  ›  jlew

跨appdomain使用自定义性能计数器进行回收

  •  6
  • jlew  · 技术社区  · 16 年前

    我有一个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似乎是假的。

    6 回复  |  直到 6 年前
    推荐文章