2013-10-14 31 views
0

我添加動態DLL到我的應用程序。調用方法後,我有內存泄漏。這裏是我的代碼:動態DLL方法調用內存泄漏

static IntfClass GetIClass(string filename) 
{ 
    Assembly classLibrary1 = null; 
    using (FileStream fs = File.Open(filename, FileMode.Open)) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      byte[] buffer = new byte[1024]; 
      int read = 0; 
      while ((read = fs.Read(buffer, 0, 1024)) > 0) 
       ms.Write(buffer, 0, read); 
      classLibrary1 = Assembly.Load(ms.ToArray()); 
     } 
    } 
    foreach (Type type in classLibrary1.GetExportedTypes()) 
    { 
     if (type.GetInterface("IntfClass") != null) 
     return Activator.CreateInstance(type) as IntfClass; 
    } 
    throw new Exception("no class found that implements interface IntfClass"); 
} 

呼籲:

IntfClass class1 = GetIClass("myDllName.dll"); 
Thread t = new Thread(new ParameterizedThreadStart(class1.runReport)); 
t.Start((object)report); 

我附加螺紋,情況我的應用程序將控制轉移到DLL中,整理的dll方法完成後,將控制權又。

+0

你正好與 「內存泄漏」 是什麼意思? Assembly.Load會將程序集加載到您的應用程序中,直到應用程序關閉時纔會釋放該程序集(該程序集將不會被卸載)。 – jbl

+0

dll方法調用後,我有100 CPU使用率,一切工作緩慢。 –

+0

什麼是DLL方法呢?我們可以看到這些代碼嗎? – Gareth

回答

0

創建一個獨立的AppDomain來加載你的程序集,並嘗試使用AppDomain的Unload方法卸載它。

如:

void LoadAssembly(){ 
AppDomain newDomain = AppDomain.CreateDomain("CreateNewDomain"); 
    newDomain.ExecuteAssembly("filename"); 
    AppDomain.Unload(newDomain); 
}