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
相关产品推荐
相关产品推荐

