动态编译代码时发生IOException

我有以下代码行:

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()); 

这会导致抛出IOException

附加信息:进程无法访问文件’C:\ Users \ Username \ AppData \ Local \ Temp \ _dgl5fb1i.err’,因为它正由另一个进程使用。

但是,这是耗费超过8GB RAM的大型程序的一部分。 在具有16GB RAM的系统上,不会抛出此exception。 动态编译的代码编译好并运行。 程序在具有足够RAM的系统上运行时没有任何错误。 该程序是为x64编译的。 请注意,我没有收到OutOfMemoryException或任何迹象表明程序内存不足。 在任务管理器中,内存使用率几乎在抛出IOException之前到达顶部。

什么可能导致这种行为,任何人都可以提出解决方案?

编辑

我修改了应用程序以使用更少的内存。 即使应用程序有足够的可用内存,错误仍然存​​在。 问题仍然只发生在一台机器上。

这可能与以下post有关: 阻止CompileAssemblyFromSource生成具有重复文件名的临时文件 。

我并行运行了几个编译。 必须更改每个编译的临时目录,以便不会发生冲突。

 CSharpCodeProvider prov = new CSharpCodeProvider(); CompilerParameters parms = new CompilerParameters(); parms.TempFiles = new TempFileCollection(tempdir);