Смягчить это, я Разделите работу на более мелкие партии. Вместо того, чтобы отправлять все 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
...
var newTracker = MyFirm.SmsTracking.Add(newTracker ); // XML based table
foreach( var recipient in recipients)
{
// 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
Мобильная версия