使用C#中的mysqldump来降低性能

时间:2012-03-01 18:15:50

标签: c# mysql mysqldump

我正在尝试使用以下代码从我的C#控制台应用程序启动mysqldump:

ProcessStartInfo procInfo = new ProcessStartInfo("mysqldump", "avisdb -uroot -p" + cs.Password);
procInfo.CreateNoWindow = true;
procInfo.RedirectStandardOutput = true;
procInfo.UseShellExecute = false;
Process proc = new Process();
proc.StartInfo = procInfo;
proc.Exited += new EventHandler(proc_Exited);
proc.Start();

proc.WaitForExit();

File.Delete("dump.sql");
StreamWriter dump = File.AppendText("dump.sql");
dump.Write(proc.StandardOutput.ReadToEnd());
dump.Flush();
dump.Close();

当我的数据库为空时,它运行良好,但是在填充数据库时需要永久​​...通过cmd启动命令只需几秒钟。我可以看到它停止在proc.WaitForExit()

提前致谢!

1 个答案:

答案 0 :(得分:1)

在StandardOutput.ReadToEnd()之前调用WaitForExit()会导致死锁情况,首先调用ReadToEnd(),你应该没问题。

来自MSDN的详细信息,http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx

  

代码示例避免了死锁条件   在p.WaitForExit之前调用p.StandardOutput.ReadToEnd。陷入僵局   如果父进程之前调用p.WaitForExit,则可能导致条件   p.StandardOutput.ReadToEnd和子进程写入足够的文本   填充重定向的流。父进程将无限期地等待   让子进程退出。子进程会等待   无限期地让父母从完整的StandardOutput中读取   流。

关于这个问题的帖子, ProcessStartInfo hanging on "WaitForExit"? Why?