日期:2014-05-17  浏览次数:21324 次

用 Assembly.Load(内存流) 的方式加载 Assembly,内存流难道会永远不释放吗?止到AppDomian该被卸载或程序退出?
用 Assembly.Load(内存流) 的方式加载 Assembly,内存流难道会永远不释放吗?止到AppDomian该被卸载或程序退出?

我的猜想依据是:
1、Assembly.LoadFile(DLL文件路径)会锁定该文件,那Assembly.Load(内存流)会锁定该内存流?
2、我的程序当加载大量DLL后,内存占用确实很大。

希望懂这方面的兄弟给分析一下。。


这是加载部分的代码:

if (!File.Exists(fullPath))
            {
                throw new ArgumentException(fullPath + " error");
            }
            byte[] fsContent;
            using (FileStream fs = File.OpenRead(fullPath))
            {
                fsContent = new byte[fs.Length];
                fs.Read(fsContent, 0, fsContent.Length);

            }
            Assembly assembly = Assembly.Load(fsContent);
            
            ////使用loadFrom会导致bothSay 抛出转换异常。
            //Assembly assembly = Assembly.LoadFrom(fullPath);
            assemblies.Add(assembly.GetName().Name, assembly);

------解决方案--------------------
你试试用Assembly.LoadFile(DLL文件路径),加载大量DLL后,内存一样很大。
------解决方案--------------------
  反射可以解决的吧!
------解决方案--------------------

------解决方案--------------------
无论如何,程序加载了大量DLL后,肯定会升高内存。