我正在尝试取回一个mysql数据库。 我创建的代码是
ProcessStartInfo proc = new ProcessStartInfo();
string cmd = string.Format(@"-u{0} -p{1} -E -R -h{2} {3}", UserName, PWD, hostname, dbname);
proc.FileName = "Path to mysqldump.exe";
proc.RedirectStandardInput = false;
proc.RedirectStandardOutput = true;
proc.Arguments = cmd;
proc.UseShellExecute = false;
Process p = Process.Start(proc);
string res;
res = p.StandardOutput.ReadToEnd();
file.WriteLine(res);
p.WaitForExit();
file.Close();
问题是当数据库大小很小时它正常工作,但当我试图恢复大型数据库(大约800 MB)时,我得到Out Of Memory Exception
。
答案 0 :(得分:1)
不是在C#中读取标准输出,为什么不通过命令行直接将其写入文件?
我通常使用以下命令获取mysqldump。它适用于Windows和Linux。
mysqldump -u{user} -p{password} --routines --triggers --result-file={dest_filename} {dbname}
-OR -
mysqldump -u{user} -p{password} --routines --triggers {dbname} > {dest_filename}
当您尝试在下一行中读取C#中的整个mysqldump输出到内存时,可能会遇到Out of memory
异常(通常在字符串超过一定大小时发生)。
res = p.StandardOutput.ReadToEnd();
答案 1 :(得分:0)
看起来非常大的字符串吃了内存。
尝试使用OutputDataReceived事件在输出文件中写入数据。
以下是两个带示例的链接 -