При выполнении задачи BCP зависает - PullRequest
1 голос
/ 26 мая 2010

У нас есть узел HPC, который выполняет некоторые из наших задач. У меня есть задача в моем проекте .net, которая запускает утилиту bcp на узле HPC, и результат моего запроса составляет 9 Мб.

Когда узел HPC выполняет эту задачу, выходные данные запроса сбрасываются в файл, а затем, после того как он сбрасывает около 5 МБ данных, он внезапно прекращает вывод дополнительных данных, и это происходит постоянно. (Пожалуйста, обратите внимание, что это не проблема данных, так как каждый раз происходит сбой в определенной строке). это может иметь или не иметь значение, но я сбрасываю данные на другой сервер, для которого установлены соответствующие разрешения.

Я выполнил команду с тем же запросом непосредственно на узле hpc и на других компьютерах, и она выдает правильный вывод.

Я запускаю команду bcp следующим образом:

var processInfo = new ProcessStartInfo ("bcp.exe", аргумент) { RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true, UseShellExecute = false };

        var proc = new Process { StartInfo = processInfo, EnableRaisingEvents = true };
        proc.Exited += new EventHandler(bcp_log);
        proc.Start();
        proc.WaitForExit();

Таким образом, мой код на самом деле ожидает выполнения каждой задачи bcp, прежде чем она выполняется, как я ее называю несколько раз.

К вашему сведению, чтобы напомнить вам еще раз, он не работает только тогда, когда мой o / p превышает определенное число байтов в этом случае около 5 МБ.

Любая помощь очень ценится.

P.S: Я хотел бы добавить, что утилита bcp установлена ​​на всех узлах hpc

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Эй, проблема здесь в том, что узел HPC не смог перенаправить вывод команды bcp на стандартный вывод. Стандартный вывод имеет минимум в таких случаях, и в нашем случае, когда количество строк в нашей таблице превысило 50000, он больше не мог перенаправить на стандартный вывод. при явной очистке стандартного вывода через определенные промежутки времени вы все равно можете без проблем перенаправить на стандартный вывод

2 голосов
/ 26 мая 2010

Будет ли зависать, если вы измените RedirectStandardOutput=true на RedirectStandardOutput=false?

Если указанные выше изменения позволяют избежать зависания, вы, вероятно, столкнетесь с ситуацией тупика, которая может возникнуть при попытке перенаправить потоки stdout и stderr через класс .NET Process. В статье MSDN, приведенной ниже, объясняется это более подробно и приводится пример кода для асинхронного чтения stderr и исключения условия взаимоблокировки.

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandarderror.aspx

...