我有以下代码行:
resizableimagewithcapinsets
导致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());
被抛出。
其他信息:进程无法访问该文件 ' C:\ Users \用户名\应用程序数据\本地\ TEMP \ dgl5fb1i.err'因为它是 被另一个进程使用。
然而,这是耗费超过8GB RAM的大型程序的一部分。在具有16GB RAM的系统上,不会抛出此异常。动态编译的代码编译好并运行。程序在具有足够RAM的系统上运行时没有任何错误。该程序是为x64编译的。请注意,我没有得到IOException
或任何迹象表明程序内存不足。在任务管理器中,内存使用率几乎在抛出OutOfMemoryException
之前达到顶部。
可能导致此行为的原因是什么,有人可以建议解决方案吗?
修改
我修改了应用程序以使用更少的内存。即使应用程序有足够的可用内存,错误仍然存在。问题仍然只发生在一台机器上。
这可能与以下帖子有关:Prevent CompileAssemblyFromSource from generate temp files with duplicate file name。
答案 0 :(得分:4)
我正在并行运行多个编译。有必要更改每个编译的临时目录,以便不会发生冲突。
CSharpCodeProvider prov = new CSharpCodeProvider();
CompilerParameters parms = new CompilerParameters();
parms.TempFiles = new TempFileCollection(tempdir);