Увеличение памяти кучи (Gen 2) При добавлении записей в таблицу баз данных на основе C1 CMS XMLC#

Место общения программистов C#
Ответить
Anonymous
 Увеличение памяти кучи (Gen 2) При добавлении записей в таблицу баз данных на основе C1 CMS XML

Сообщение Anonymous »

Я использую C# и Hangfire для отправки 8000 SMS -сообщений с помощью фоновой работы. Однако, когда я выполняю это в одном задании, память о кучах (Gen2) значительно увеличивается, заставляя сервер без реагирования.
Смягчить это, я Разделите работу на более мелкие партии. Вместо того, чтобы отправлять все 8000 сообщений одновременно, я 1000 сообщений на работу .
после 1000 сообщений отправляются , я планирую Новая работа Hangfire внутри самой задания с 6-секундной задержкой , и это продолжается до тех пор, пока все сообщения не будут обработаны.
Даже после Завершается задание, память кучи Gen2 продолжает оставаться и не выпущена, даже после вызова gc.collect () вручную .
Ниже, на картинке вы можете увидеть зигзагообразные шаблоны, представляющие каждую обработанную задачу, и память, гг 2, остается или увеличивается. < /p>

Я определил строку кода, которая, по -видимому, вызывает значительное увеличение памяти кучи (Gen 2) В моем приложении: < /p>

Код: Выделить всё

newTracker = connection.Add(newTracker );
< /code>
Здесь я просто добавляю запись отслеживания, которая содержит номер телефона, время отправки, и если ссылка в сообщении была нажата, время щелчка. < /p>
public static class Cron
{
public static void JobSendSMS()
{

// Do some DB reads here
...

MyFirm.SmsTracking newTracker = null;

foreach( var recipient in recipients)
{
newTracker  = connection.CreateNew();
// read some data and send the sms
...

// Add a tracking record
newTracker = connection.Add(newTracker );

}

GC.Collect(); // This line only clears some heap memory just created in the job so It won't help

}
< /code>
после завершения всех заданий; Отделенная память кучи Gen2 остается, никогда не выпускается,  Я не уверен, когда она будет выпущена. Увеличение графика (представляющая память Генерального звена 2 никогда не происходит: < /p>
// newTracker = connection.Add(newTracker);

P.S 1: myfirm.smstracking DataType не включен поиск. Почему вставка записи в базу данных C1 вызывает рост памяти Gen2?
Есть ли известная проблема с базами данных C1 и управлением памятью в C#?
Как я могу предотвратить накопление памяти при использовании базы данных C1 Операции?


Подробнее здесь: https://stackoverflow.com/questions/794 ... atabase-ta
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»