Многопоточность WF4 - внутри и без Visual Studio 2010 - PullRequest
0 голосов
/ 25 февраля 2011

У меня есть многопоточный проект производитель-потребитель, который тянет по 1 миллиону строк и проходит по каждой. каждая итерация вызывает метод invoke из workflow-invoker. Поскольку это своего рода небольшой вызов и он также должен быть синхронным, при запуске его в Visual Studio 2010 он не использует пик процессора (который я ожидаю равным 80/90%), как только Запустите его без Visual Studio, т.е. запустите exe-файл с консоли, он работает нормально и достигает пика. просто для дополнительной информации для каждого потока создаются экземпляры WorkflowInvoker и CustomWorkflow, чтобы у всех них была копия общего ресурса. когда происходит каждая итерация, она сбрасывает входные значения и затем вызывает рабочий процесс.

while (true)
{
  row = _buffer.Receive();
  input["arg1"] = arg1;
  input["arg2"] = arg2;
  output = resource.WorkflowInvoker.Invoke(input);
}

Мой вопрос: почему при запуске в Visual Studio исполнение не достигает максимума, а не при запуске его непосредственно из консоли с использованием файла .exe?

спасибо, Моиз

Ответы [ 2 ]

0 голосов
/ 25 февраля 2011

Полагаю, что запуск его под отладчиком увеличивает издержки настолько, что любая блокировка не имеет большого значения.

0 голосов
/ 25 февраля 2011

Когда вы говорите «запустить его в Visual Studio», вы имеете в виду под отладчиком (F5) или просто запускаете с VS (CTRL-F5)?

Если вы работаете под отладчиком, тогдапроизводительность отличается, потому что различные события (включая запуск / останов потока и вывод трассировки отладки) вызывают события отладки, которые должен обрабатывать отладчик.

Если вы на самом деле не хотите использовать отладчик, тогда нажмите CTRL.-F5 будет иметь тенденцию давать намного более быстрый запуск и немного более быстрое выполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...