Igo*_*evo 6 c# reflection memory-management ioexception .net-assembly
我有以下代码行:
CSharpCodeProvider c = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.CompilerOptions = "/t:library";
cp.GenerateInMemory = true;
CompilerResults cr = c.CompileAssemblyFromSource(cp, sb.ToString());
Run Code Online (Sandbox Code Playgroud)
这会导致IOException被抛出.
附加信息:进程无法访问文件'C:\ Users\Username\AppData\Local\Temp\_dgl5fb1i.err',因为它正由另一个进程使用.
但是,这是耗费超过8GB RAM的大型程序的一部分.在具有16GB RAM的系统上,不会抛出此异常.动态编译的代码编译好并运行.程序在具有足够RAM的系统上运行时没有任何错误.该程序是为x64编译的.请注意,我没有得到OutOfMemoryException或任何迹象表明程序内存不足.在任务管理器中,内存使用率几乎在IOException抛出之前达到顶部.
什么可能导致这种行为,任何人都可以提出解决方案?
编辑
我修改了应用程序以使用更少的内存.即使应用程序有足够的可用内存,错误仍然存在.问题仍然只发生在一台机器上.
这可能与以下帖子有关:阻止CompileAssemblyFromSource生成具有重复文件名的临时文件.
我正在并行运行多个编译。每次编译都需要更改临时目录,以免发生冲突。
CSharpCodeProvider prov = new CSharpCodeProvider();
CompilerParameters parms = new CompilerParameters();
parms.TempFiles = new TempFileCollection(tempdir);
Run Code Online (Sandbox Code Playgroud)