У меня сейчас проблема с BackgroundWorker
, работающим на Windows Server 2003. У меня есть оконное приложение, которое должно работать более 50 threads
.
Код, который я написал, использует BackgroundWorker
(BW) в качестве оболочки Thread для обновления данных в форме окна. Проблема заключается в том, что код способен запускать более 50 BW на моем компьютере с XP, но останавливается на 50 при работе на сервере Windows 2003.
Сначала я подумал, что существует ограничение на количество потоков, которое может запускать приложение. Поиск в Google показывает, что это не так. Я написал следующий код, чтобы подтвердить это.
static int count = 0;
static void Main(string[] args)
{
int max = 55; // default value
if (args.Length > 0)
// use command line parameter if provided
max = Convert.ToInt32(args[0]);
List<Thread> threadList = new List<Thread>();
try
{
while (count < max)
{
Thread newThread = new Thread(
new ParameterizedThreadStart(DummyCall), 1024);
newThread.Start(count);
threadList.Add(newThread);
count++;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
}
static void DummyCall(object obj)
{
Console.WriteLine(obj.ToString());
Thread.Sleep(1000000000);
}
Результат показывается, как и ожидалось. Я вижу список чисел от 0 до 54 как на моем компьютере с XP, так и на сервере 2003 года.
Однако, когда я пытаюсь использовать BW вместо этого, моя машина XP работает на 54, а сервер 2003 работает на 49 (50 BW). Вот код.
static int count = 0;
static void Main(string[] args)
{
int max = 55; // default value
if (args.Length > 0)
// use command line parameter if provided
max = Convert.ToInt32(args[0]);
List<BackgroundWorker> list = new List<BackgroundWorker>();
try
{
while (count < max)
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync(count);
list.Add(worker);
count++;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
}
static void worker_DoWork(object sender, DoWorkEventArgs e)
{
Console.WriteLine(e.Argument.ToString());
Thread.Sleep(1000000000);
}
Итак, вопрос в том, почему существует ограничение на количество экземпляров BW, которые могут работать на сервере 2003, но не на XP? Могу ли я в любом случае увеличить количество экземпляров BW на 2003 сервере? Если да, как я могу это сделать?