2

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

問題は、データベースサイズが小さい場合は正しく機能しますがOut Of Memory Exception、大規模なデータベース(約800 MB)をバックアップしようとすると正常に動作することです。

4

2 に答える 2

1

C#で標準出力を読み取る代わりに、コマンドラインから直接ファイルに書き込んでみませんか?

私は通常、次のコマンドを使用してmysqldumpsを取得します。WindowsとLinuxの両方で動作します。

mysqldump -u{user} -p{password} --routines --triggers --result-file={dest_filename} {dbname}

-また-

mysqldump -u{user} -p{password} --routines --triggers {dbname} > {dest_filename}

発生したOut of memory例外は、次の行のC#でmysqldumpの出力全体をメモリに読み込もうとしたときに発生した可能性があります(通常、文字列が特定のサイズを超えた場合に発生します)。

res = p.StandardOutput.ReadToEnd();
于 2012-12-06T07:03:30.630 に答える
0

非常に大きな文字列がメモリを食べたようです。

OutputDataReceivedイベントを使用して、出力ファイルにデータを書き込んでみてください。

ここに例のある2つのリンクがあります-

  1. Process.OutputDataReceivedイベント
  2. Process.BeginOutputReadLineメソッド
于 2012-12-06T07:40:00.037 に答える