Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Thread.Start() и OutOfMemoryException / 10 сообщений из 10, страница 1 из 1
23.08.2009, 01:35
    #36158460
Thread.Start() и OutOfMemoryException
Делаю серверное приложение, в нем такой метод
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
private void ServerListener()
        {
            try
            {
                Thread th = new Thread(delegate()
                                           {
                                               while (serverRunning)
                                               {
                                                   try
                                                   {
                                                       count++;
                                                       Socket acceptedSocket = Listener.Accept();
                                                       Thread ths = new Thread(delegate()
                                                                                   {
                                                                                       ConnectionAccepter(acceptedSocket);
                                                                                   });
                                                       ths.Start(); // Ошибка тут
                                                       PersonalThreadsAndConnections.Add(acceptedSocket, ths);
                                                   }
                                                   catch (Exception ex)
                                                   {
                                                       Message(ex.ToString() + " "+count.ToString());
                                                   }
                                               }
                                           });
                th.Start();
                PublicThreads.Add(th);
            }
            catch (Exception ex)
            {
                Objects.form1.textBox7.AppendText(ex.ToString() + " " + count.ToString());
            }
        }

Сделал клиентское приложение которое вайлом делает конекты на сервер, через некоторое время выскакивает сообщение об ошибке на сервере

авторSystem.OutOfMemoryException: Выдано исключение типа "System.OutOfMemoryException".
в System.Threading.Thread.StartInternal(IPrincipal principal, StackCrawlMark& stackMark)
в System.Threading.Thread.Start()
в BM_Server.NetworkSocket.<ServerListener>b__0() в C:\Projects\C#\Server\Network\NetworkSocket.cs:строка 152 2453

Почему выскакивает это сообщение? в диспетчере задач сервер жрет всего 45 мегабайт.

И как это исправить, и что в моем случае посоветуете почитать.
...
Рейтинг: 0 / 0
23.08.2009, 01:38
    #36158461
Thread.Start() и OutOfMemoryException
причем на разных компьютерах ошибка в одной и той же строке, хотя при каждом покдлючении вызывается по два потока...
...
Рейтинг: 0 / 0
23.08.2009, 04:09
    #36158478
Thread.Start() и OutOfMemoryException
тьфу ты, сам в своем коде запутался, конечно же при входящих подключениях создается 1 поток (ну это итак видно)

выдерживает только 2453 одновременно подключенных клиентов, но как быть если нужно больше?
...
Рейтинг: 0 / 0
23.08.2009, 05:14
    #36158484
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread.Start() и OutOfMemoryException
Любитель .NET технологийтьфу ты, сам в своем коде запутался, конечно же при входящих подключениях создается 1 поток (ну это итак видно)

выдерживает только 2453 одновременно подключенных клиентов, но как быть если нужно больше?

Не создавать отдельный поток на каждого клиента. Использовать event-driven programming, очереди и конечные автоматы.
...
Рейтинг: 0 / 0
23.08.2009, 13:19
    #36158597
andrei.t
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread.Start() и OutOfMemoryException
Любитель .NET технологий,

А Вам действительно надо одновременно 2500 запросов обрабатывать?

Дело в том, что System.Threading.Thread всего лишь обёртка над потоком ОС, который при создании выделяет память под собственный стек. В принципе размером стека можно манипулировать.
System.Threading.Thread.ctor . Хотя настоятельно не рекомендуется это делать.

В любом случае, рекомендую посмотреть на следующие вещи.

WCF Messaging
Spring.Messaging и
Spring.Messaging.EMS
SEDA
...
Рейтинг: 0 / 0
23.08.2009, 15:20
    #36158673
Thread.Start() и OutOfMemoryException
всем спасибо
...
Рейтинг: 0 / 0
23.08.2009, 17:29
    #36158761
Thread.Start() и OutOfMemoryException
если кому интересно

http://www.microsoft.com/Rus/Msdn/Magazine/2005/08/Winsock.mspx
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
28.03.2015, 16:30
    #38919891
Kuzma Kuvardin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread.Start() и OutOfMemoryException
Возможно дело в виртуальной памяти, кэше.
Почистить %temp%
...
Рейтинг: 0 / 0
28.03.2015, 16:44
    #38919894
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread.Start() и OutOfMemoryException
Kuzma Kuvardin,

за 6 лет наверное почистил уже
...
Рейтинг: 0 / 0
28.03.2015, 18:28
    #38919927
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Thread.Start() и OutOfMemoryException
Winnipuhза 6 лет наверное почистил уже

Это ж зарегался специально, чтоб посоветовать :)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Thread.Start() и OutOfMemoryException / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]