Поток не смог запустить C # из-за низкого уровня виртуальной памяти - PullRequest
0 голосов
/ 08 сентября 2018

Сегодня один мой клиент получил ошибку (ниже) при запуске моего приложения

ERR :: - 2146233051: Не удалось запустить поток. в System.Threading.Thread.StartInternal (основной принцип IP, StackCrawlMark & ​​stackMark) в System.Threading.Thread.Start ()

=========

Как видите, говорится, что не удалось создать поток. Код, использованный для создания темы

//-state -> stateobject for receving socketdata

objState.m_strReceivedData = state.m_strReceivedData;
objState.m_strComputerName = state.m_strComputerName;

objThread = new Thread(new ParameterizedThreadStart(MethodName));
                            objThread.Start(objState);

На основании ошибки кажется, что ошибка произошла в приведенном выше коде. Кроме того, в средстве просмотра событий появлялось предупреждение о нехватке памяти о том, что мой exe использует больше всего виртуальной памяти. Ниже приведено сообщение, которое я получил в программе просмотра событий.

Windows успешно диагностировала состояние низкой виртуальной памяти. Следующие программы занимают больше всего виртуальной памяти: application.exe (4272) потребляется 32793702400

Я думаю, что происходит утечка памяти, поэтому я должен принудительно вызвать GC.Collect () Или есть какой-то другой вариант?

Пожалуйста, совет! Спасибо за помощь заранее. :)

1 Ответ

0 голосов
/ 08 сентября 2018

Следуйте ниже для уменьшения потребления памяти:

1. Когда-либо, если объект создан и используется, и он вам больше не нужен, обнуляйте его.

2.Не загружайте ненужные данные / Не пытайтесь загружать огромные данные одновременно

как 1.) огромные данные, прочитанные из файлов 2.) огромные данные, прочитанные из базы данных

3. когда вы не используете объект в блоке, не упоминайте его в блоке, поэтому GC легко собирает его быстро.

4.Не содержат копии одних и тех же объектов данных, например

  public class Student
    {
       string Name;
       string ID;
    }

если для этого созданы два объекта с одинаковыми данными

Student1 { Имя: Раму, ID: 40 }

и вы создали другой объект student2, имеющий те же данные, что и

Stuent2 { Имя: Раму, ID: 40 }

Теперь, даже если это другой объект, но это дублирование данных

Который вне курса занимает память

if student1=2mb
then student2=2mb
total 4mb for maintaining same data
...