动态编译产生的程序集如何释放
动态编译产生的程序集怎么释放
动态编译产生的程序集需要释放吗?如果需要释放该怎么释放?
上面的代码发现随着程序运行时间的变长,内存占用一直增长。如果把这部分注释掉,内存占用基本不变。
------解决方案--------------------
CreateDomain再运行
http://stackoverflow.com/questions/1799373/how-can-i-prevent-compileassemblyfromsource-from-leaking-memory
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
------解决方案--------------------
对于托管代码来说,程序集没有释放这种说法,想要释放只能是创立应用程序域,因为应用程序域有释放的说法。
动态编译产生的程序集需要释放吗?如果需要释放该怎么释放?
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameter = new CompilerParameters();
parameter.ReferencedAssemblies.Add("System.dll");
parameter.IncludeDebugInformation = false;//不包含调试信息
parameter.GenerateExecutable = false; //<--不生成exe
parameter.GenerateInMemory = true; //<--直接在内存运行
string codeBlock = GenerateCodeBlocks(formula);
CompilerResults result = provider.CompileAssemblyFromSource(parameter, codeBlock);
//编译成功
if (result.Errors.Count > 0)
{
throw new Exception("函数编译失败");
}
上面的代码发现随着程序运行时间的变长,内存占用一直增长。如果把这部分注释掉,内存占用基本不变。
------解决方案--------------------
CreateDomain再运行
http://stackoverflow.com/questions/1799373/how-can-i-prevent-compileassemblyfromsource-from-leaking-memory
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
------解决方案--------------------
对于托管代码来说,程序集没有释放这种说法,想要释放只能是创立应用程序域,因为应用程序域有释放的说法。