.NET运行时(80131506)/ CLR.DLL中的内部错误

时间:2017-03-24 09:58:12

标签: c# .net-4.5

通过RDP在Windows Server环境中运行我的应用程序时,我一直收到CLR.dll错误。

原因似乎是我在TPL Parallel For Loop中产生了phantomJS。这是我用来生成进程的代码。

            using (Process process = new Process())
            {
                process.StartInfo.FileName = "phantomjs.exe";
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.RedirectStandardOutput = true;
                process.OutputDataReceived += (sender, args) =>
                { 
                   Console.WriteLine(args.Data);
                };
                process.Start();
                process.BeginOutputReadLine();

                // Don't leave orphan phantomJs
                if (process.WaitForExit(3 * 60 * 1000) == false)
                {
                    process.Kill();
                }
                else
                {
                    process.Close();
                }
            }

并行代码位于上方并且很简单。但它调用了许多方法,这些方法最终会触及上面的流程启动代码。

Parallel.ForEach(urls, new ParallelOptions() { MaxDegreeOfParallelism = 5 },
                (url) => KickOfPhantomJs(url)
                );

仅供参考这个代码是通过Quartz.NET运行的,不确定是否值得一提。

我试过了:

  1. 通过配置文件禁用GC
  2. 将应用设置为x86
  3. 尝试使用另一个控制台应用程序产生幻影(这对我尝试的方式没有帮助)
  4. 从.NET 4.0更新到.NET 4.5并安装所有最新更新
  5. 虽然WinForms应用程序与CLR.DLL崩溃,但实际功能运行完成。因为任务是通过quartz.net运行的,所以即使UI已经冻结并且正在显示错误消息框,实际应用程序也可以完成所有任务的运行。

0 个答案:

没有答案