小编Ego*_*gor的帖子

将程序集加载到子AppDomain并释放dll文件

我有子app-domain,我想在启动时加载一些dll库并释放文件,这样任何人都可以删除它们.

在启动时,我做

Loader al = (Loader)domain.CreateInstanceAndUnwrap(
typeof(Loader).Assembly.FullName,
typeof(Loader).FullName);
al.Load(path)
Run Code Online (Sandbox Code Playgroud)

以下课程.

class Loader : MarshalByRefObject
{
    internal void Load(string path)
    {
        Assembly assembly;
        try
        {
            assembly = Assembly.Load(File.ReadAllBytes(path));
        }
        catch (Exception) { return; }
    }
    internal UseType(string fullyQualifiedTypeName)
    {
         Type userType = Type.GetType(fullyQualifiedTypeName);
    }
}
Run Code Online (Sandbox Code Playgroud)

稍后我调用UseType并获得正确的类型,但我无法再删除该文件,因为它就像子app域已锁定dll一样.

基本上我想要实现的是在启动时缓存程序集文件,然后使用GetType调用以便释放实际的dll文件.

真的有可能实现这样的目标吗?

c# reflection appdomain

5
推荐指数
1
解决办法
1750
查看次数

LockTwo来自“多处理器编程的艺术”

这是“多处理器编程的艺术”中两个线程的mutext实现

private int victim;
// thread-local index, 0 or 1

public void lock() {
  int i = ThreadID.get();
  victim = i;                 // let the other go first
  while (victim == i) {}      // spin
}
public void unlock() {}
Run Code Online (Sandbox Code Playgroud)

他们指出,如果“一个线程先于另一个线程运行”,则此代码将死锁。没有死锁发生时,任何人都可以描述交错执行的示例。

mutex locking

5
推荐指数
1
解决办法
384
查看次数

标签 统计

appdomain ×1

c# ×1

locking ×1

mutex ×1

reflection ×1