У меня есть небольшое приложение WPF C #, в основе которого лежит параллельный цикл foreach. Фактический цикл не требует особого ожидания ответа от сети (в основном это сетевой сканер), и он отлично работает, выполняя его в Visual Studio 2010 - приложение будет наращивать до сотен потоков, даже тысяч, если я позволю бежать достаточно долго.
Вот основной бит кода:
ParallelOptions parallelOptions = new ParallelOptions();
parallelOptions.MaxDegreeOfParallelism = 4; // I've tried changing this all the way up to the maximum
ThreadPool.SetMinThreads(100, 100);
Parallel.ForEach<string>(scanAddresses, parallelOptions, (toscan,state) =>
{
doMyScan(toscan);
}
Однако, когда я «публикую» его как приложение «ClickOnce», приложение не работает с многопоточностью, или вообще не работает, на некоторых машинах - число потоков никогда не превышает 16 потоков независимо от того, как долго это осталось. Я не могу точно определить, что является общим знаменателем - я исключил ОС (например, XP против Win7), процессоры, память и 32-разрядную или 64-разрядную. Приложение даже плохо себя ведет, когда я загружаю его в свою виртуальную машину разработки с рабочего сервера - поэтому то же самое приложение и код, который летит под VS2010, сканирует при запуске «вживую» на точно той же самой коробке, в которой оно было разработано на , Но на других машинах он работает так, как задумано, порождая множество потоков, даже на самых ограниченных установках XP.
Я почти уверен, что основной код исправен - в конце концов, он отлично работает на НЕКОТОРЫХ машинах, и у меня есть вариант того же кода, который отлично работает как консольное приложение - так что это что-то в процессе развертывания, которое его нарушает , Кто-нибудь может подсказать, как начать устранение неполадок с этим?