Esempio n. 1
0
        /// <summary>
        /// Установить минимальное кол-во потов пула
        /// </summary>
        /// <param name="worker">Кол-во "обычных" потоков,
        /// если > 0, устанавливается значение не меньшее кол-ва процессоров (ядер),
        /// иначе значение не меняется</param>
        /// <param name="completionPort">Кол-во потоков асинхронного ожидания I/O,
        /// если > 0, устанавливается значение не меньшее кол-ва процессоров (ядер),
        /// иначе значение не меняется</param>
        /// <param name="autoGrowthMax">Флаг автоматического увеличения максимального кол-ва потоков,
        /// если заданы превышающие их значения</param>
        /// <returns>Флаг успешного выполнения</returns>
        public bool SetMinPoolLimits(int worker, int completionPort, bool autoGrowthMax = true)
        {
            bool result     = false;
            int  processors = Environment.ProcessorCount;

            worker         = worker <= 0 ? Min.Worker : worker < processors ? processors : worker;
            completionPort = completionPort <= 0 ? Min.CompletionPort : completionPort < processors ? processors : completionPort;
            if (worker != Min.Worker || completionPort != Min.CompletionPort)
            {
                if (worker <= Max.Worker && completionPort <= Max.CompletionPort ||
                    autoGrowthMax && ThreadPool.SetMaxThreads(Math.Max(worker, Max.Worker), Math.Max(completionPort, Max.CompletionPort)))
                {
                    if (result = ThreadPool.SetMinThreads(worker, completionPort))
                    {
                        _min       = null;
                        _max       = null;
                        _available = null;
                    }
                }
            }
            else
            {
                result = true;
            }

            return(result);
        }
Esempio n. 2
0
 /// <summary>
 /// Получить максимальные значения ограничений
 /// </summary>
 /// <param name="lim1">Первый набор ограничений</param>
 /// <param name="lim2">Второй набор ограничений</param>
 /// <returns>Составленный из двух набор максимальных ограничений</returns>
 public static ThreadLimits Max(ThreadLimits lim1, ThreadLimits lim2)
 {
     return(new ThreadLimits()
     {
         Worker = Math.Max(lim1 == null ? 0 : lim1.Worker, lim2 == null ? 0 : lim2.Worker),
         CompletionPort = Math.Max(lim1 == null ? 0 : lim1.CompletionPort, lim2 == null ? 0 : lim2.CompletionPort)
     });
 }
Esempio n. 3
0
        /// <summary>
        /// Установить максимальное кол-во потоков
        /// </summary>
        /// <param name="worker">Кол-во "обычных" потоков,
        /// если > 0, устанавливается значение не меньшее кол-ва процессоров (ядер),
        /// иначе значение не меняется</param>
        /// <param name="completionPort">Кол-во потоков асинхронного ожидания I/O,
        /// если > 0, устанавливается значение не меньшее кол-ва процессоров (ядер),
        /// иначе значение не меняется</param>
        /// <returns>Флаг успешного выполнения</returns>
        public bool SetMaxPoolLimits(int worker, int completionPort)
        {
            bool result     = false;
            int  processors = Environment.ProcessorCount;

            worker         = worker <= 0 ? Max.Worker : worker < processors ? processors : worker;
            completionPort = completionPort <= 0 ? Max.CompletionPort : completionPort < processors ? processors : completionPort;
            if (worker != Max.Worker || completionPort != Max.CompletionPort)
            {
                if (result = ThreadPool.SetMaxThreads(worker, completionPort))
                {
                    _max       = null;
                    _available = null;
                }
            }
            else
            {
                result = true;
            }

            return(result);
        }
Esempio n. 4
0
 /// <summary>
 /// Установить максимальное кол-во потоков
 /// </summary>
 /// <param name="limits">Ограничение на кол-во потоков</param>
 /// <returns>Флаг успешного выполнения</returns>
 public static bool SetMaxPoolLimits(this ThreadLimits limits)
 {
     return(limits == null ? false : Settings.SetMaxPoolLimits(limits.Worker, limits.CompletionPort));
 }
Esempio n. 5
0
 /// <summary>
 /// Установить минимальное кол-во потоков пула
 /// </summary>
 /// <param name="limits">Ограничение на кол-во потоков</param>
 /// <param name="autoGrowthMax">Флаг автоматического увеличения максимального кол-ва потоков,
 /// если заданы превышающие их значения</param>
 /// <returns>Флаг успешного выполнения</returns>
 public static bool SetMinPoolLimits(this ThreadLimits limits, bool autoGrowthMax = true)
 {
     return(limits == null ? false : Settings.SetMinPoolLimits(limits.Worker, limits.CompletionPort, autoGrowthMax));
 }