标准输出读取器挂起BCP工具

标准输出读取器挂起BCP工具,第1张

概述标准输出读取器挂起BCP工具

我正在通过EXE执行BCP命令,并复制50000行后,它stucks。 我看了一些论坛,并知道如果我们在代码中使用StandardOutputReader比它的输出的最大限制接近50000行这是发生在我身上有一种方法我运行redirect输出,其中超过50000行可以出。

这个代码在这里工作,我有

proc.StartInfo.RedirectStandardOutput = false;

但我想要真实的看到输出。

private static voID RunBatch(string Fullfilepath,string BatchfilePathDumpFlatfile) { mLogger.Error("RunBatch Start=== >"); mLogger.Error("Batch filepath " + Fullfilepath + 'n' + "Batch file Directory " + BatchfilePathDumpFlatfile); Process proc = null; string targetDir = BatchfilePathDumpFlatfile; proc = new Process(); proc.StartInfo.WorkingDirectory = targetDir; proc.StartInfo.filename = Fullfilepath; //proc.StartInfo.CreateNowindow = true; proc.StartInfo.UseShellExecute = false; proc.StartInfo.Arguments = "/c"; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.RedirectStandardOutput = false; proc.Start(); proc.WaitForExit(); string output = proc.StandardOutput.ReadToEnd(); proc.WaitForExit(); string error = proc.StandardError.ReadToEnd(); proc.WaitForExit(); mLogger.Error("Output from batch " + output); mLogger.Error("Error From Batch " + error); }

更新1:

使用.NET监视windows 7中的声卡输出

SSL证书valIDation – 是否涉及任何caching?

一个线程可以在临界区中被抢占吗?

从windows服务启动浏览器

什么是构buildwindows Phone 7应用程序要连接的服务的最佳可伸缩体系结构?

private static voID RunBatch(string Fullfilepath,string BatchfilePathDumpFlatfile) { mLogger.Error("RunBatch Start=== >"); mLogger.Error("Batch filepath " + Fullfilepath + 'n' + "Batch file Directory " + BatchfilePathDumpFlatfile); Process proc = null; string targetDir = BatchfilePathDumpFlatfile; proc = new Process(); proc.StartInfo.WorkingDirectory = targetDir; proc.StartInfo.filename = Fullfilepath; //proc.StartInfo.CreateNowindow = true; proc.StartInfo.UseShellExecute = false; proc.StartInfo.Arguments = "/c"; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.RedirectStandardOutput = true; proc.Start(); string output = proc.StandardOutput.ReadToEnd(); proc.WaitForExit(); string error = proc.StandardError.ReadToEnd(); proc.WaitForExit(); mLogger.Error("Output from batch " + output); mLogger.Error("Error From Batch " + error); }

这是我使用的是有一个错误,因为仍然BCP挂起,并开始运行,当我停止代码的EXE。

linux世界中是否有与.Net fileSystemWatcher相当的function?

如何从Web服务器打印格式化的文本并确认打印成功?

如何检测用户的密码是否已过期

如何设置.NET框架的作业调度?

如何以编程方式格式化FAT16的SD卡?

这是经典的死锁条件。 在完全读取StandardOutput之前,不应该调用WaitForExit 。

当输出被重定向时,进程在其所有StandardOutput流被读取之前不会终止。 因此,调用WaitForExit将等待启动的进程终止,并且子进程将等待父进程完全读取输出流,然后才能完成,从而导致死锁。

Msdn提供解释和代码示例以避免死锁。

同步读取 *** 作在StandardOutput流的调用者读取和写入该流的子进程之间引入依赖关系。 这些依赖关系可能会导致死锁情况。 当调用者从子进程的重定向流中读取时,它依赖于子进程。 调用者等待读取 *** 作,直到孩子写入流或关闭流。 当子进程写入足够的数据来填充重定向的流时,它依赖于父进程。 子进程等待下一个写 *** 作,直到父进程从完整流读取或关闭流。 当调用者和子进程相互等待以完成 *** 作时,会导致死锁情况,两者都不能继续。 您可以通过评估调用者和子进程之间的依赖关系来避免死锁。

// Start the child process. Process p = new Process(); // Redirect the output stream of the child process. p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.filename = "Write500lines.exe"; p.Start(); // Do not wait for the child process to exit before // reading to the end of its redirected stream. // p.WaitForExit(); // Read the output stream first and then wait. string output = p.StandardOutput.ReadToEnd(); p.WaitForExit();

代码示例通过在p.WaitForExit之前调用p.StandardOutput.ReadToEnd来避免死锁情况。 如果父进程在p.StandardOutput.ReadToEnd之前调用p.WaitForExit并且子进程写入足够的文本来填充重定向的流,则可能会导致死锁情况。 父进程将无限期地等待子进程退出。 子进程将无限期等待父进程从完整的StandardOutput流中读取。

从标准输出和标准错误流中读取所有文本时,也有类似的问题。 例如,以下C#代码对两个流执行读取 *** 作。

// Do not perform a synchronous read to the end of both // redirected streams. // string output = p.StandardOutput.ReadToEnd(); // string error = p.StandardError.ReadToEnd(); // p.WaitForExit(); // Use asynchronousous read operations on at least one of the streams. p.BeginoutputReadline(); string error = p.StandardError.ReadToEnd(); p.WaitForExit();

上面几乎所有的东西都来自msdn,我建议你仔细阅读,以免进一步造成死锁。

总结

以上是内存溢出为你收集整理的标准输出读取器挂起BCP工具全部内容,希望文章能够帮你解决标准输出读取器挂起BCP工具所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1278955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存