2010-06-16 2 views
1

Я работаю над приложением Windows, которое разработано на C#. Я новичок в мире окон. Я хочу ограничить количество параллельных потоков, выполняемых для этого приложения, в данный момент времени. Этот номер может быть изменен пользователем на более жесткой машине. Каков наилучший способ сделать эту конфигурацию и как ее можно достичь. Я могу думать о следующих подходах. 1. Используйте ConfigurationManager для чтения значения конфигурации. Если пользователь существует больше N числа потоков, отображает сообщение и дает возможность изменять значение N. 2. Использовать запись в регистре?Конфигурируемость для приложений Windows, построенных на C#

Спасибо заранее! Sam

+2

Это не похоже на правильное решение проблемы. Планировщик Windows очень хорош - если у вас больше потоков, чем ядер, производительность не пострадает. В идеале у вас будет такое же количество потоков, что и ядра, см. Http://stackoverflow.com/questions/1542213/how-to-find-the-number-of-cpu-cores-via-net-c –

ответ

1

Как говорит Андрей в своем комментарии, я не уверен, что это хорошо.

Однако, касательно фактический вопрос. Предполагая, что это параметр для каждого пользователя, я бы использовал его как пользовательский параметр в файле конфигурации, так что у вас есть значение по умолчанию, но каждый пользователь может изменить его, если захочет. См. here.

1

В ответ на первоначальный вопрос: На мой взгляд, лучший способ для хранения конфигурации/настроек для приложения Windows, в .NET является использование вкладки свойств проекта Настройки: Project's Settings tab http://img6.imageshack.us/img6/8156/settingswn.png

Таким образом, вы будете имеют сильные типизированные экземпляры, представляющие эти настройки. . Properties.Settings.Default.MaxWorkerThreads

Также он предоставит значения по умолчанию для этого параметра, поэтому, если пользователь не скопировал/не создал файл конфигурации, значение параметра будет иметь значение по умолчанию.

Что касается ограничения количества параллельных потоков как самой задачи, я бы рекомендовал Task Parallel Library (TPL) или Parallel LINQ (PLINQ) (в зависимости от конкретной проблемы, которую вы решаете) - особенно если ваше приложение зависит только от мощности вычислений (но не от пропускной способности сети , например). У TPL есть некоторая логика для выделения оптимального количества потоков при запуске.

См. Parallel Programming in the .NET Framework для получения дополнительной информации по теме.

Смежные вопросы