You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#程序运行时如何检测当前处于使用状态的DLL

DLL运行时使用状态判定问题

核心咨询方向

本次咨询不讨论【DLL被引用/加载的状态】,只讨论【DLL正在执行业务逻辑的实际使用状态】,为避免歧义,通过具体代码示例说明问题。

测试场景代码

主程序引用A.dll和B.dll,两个DLL的初始源码如下:

// A.dll
namespace A {
    public static void Work10sec() {
        // 此处为耗时10秒的业务处理逻辑
    }
}

// B.dll
namespace B {
    public static void Work5sec() {
        // 此处为耗时5秒的业务处理逻辑
    }
}

主程序按顺序调用两个DLL的方法,源码如下:

namespace Main {
    static class Program {
        [STAThread]
        static void Main() {
            A.Work10sec();
            B.Work5sec();
        }
    }
}

初始认知与待解答疑问

最初的认知假设:

  • 程序启动后0-10秒区间:A.dll处于使用状态
  • 程序启动后10-15秒区间:B.dll处于使用状态
    基于该假设提出疑问:

主程序通过什么机制感知0-10秒阶段A.dll正在被使用?又如何判定10-15秒阶段A.dll已经结束使用?

说明:之前表述存在歧义,已将原示例中占位用的Thread.Sleep()替换为实际业务处理逻辑标注

实测结论

实际验证后得到结论:DLL一旦被加载到当前应用程序域,就会一直被系统判定为处于占用/使用状态,和是否正在执行DLL内部的代码逻辑没有关联。

已尝试的标记方案

为了准确标记DLL内部业务逻辑的实际运行状态,目前的实现方式是在A.dll中添加静态标记字段,代码如下:

// A.dll
namespace A {
    public static bool used = false;
    public static void Work10sec() {
        used = true;
        // 此处为耗时10秒的业务处理逻辑
        used = false;
    }
}

如果存在更合理、更通用的实现方案,欢迎提供思路。


内容的提问来源于stack exchange,提问作者HR P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:42:27