- A+
所属分类:.NET技术
最近ET做热更重载dll的时候,返回登陆会重新检测新的dll,首次登录之前已经Assembly.Load()过一次dll,第二次返回登陆再次load dll到内存中,Invoke执行方法的时候,异常了,有些方法执行了,有些未执行,于是查资料,看到些老资料说Assembly.Load重复加载同名dll不会有问题,而却现在有异常了。断点看到重复加载的dll重复的堆在了AppDomain.CurrentDomain.GetAssemblies()里面,多分dll引发了方法调用异常,Assembly不会自动在重复加载同一份dll的时候先清理旧的再加载新的,二十堆叠加载到内存中去,Assembly也没提供Unload方法给开发者主动卸载,微软着实有点大坑。于是只能做判定内存中已经加载了的dll,跳过不加载了,做了过滤之后,返回登陆在执行逻辑,完全正常。