Heap -Speichererhöhung (Gen 2) beim Hinzufügen von Datensätzen zu C1 CMS XML -basierter DatenbanktabelleC#

Ein Treffpunkt für C#-Programmierer
Guest
 Heap -Speichererhöhung (Gen 2) beim Hinzufügen von Datensätzen zu C1 CMS XML -basierter Datenbanktabelle

Post by Guest »

Ich verwende C# und Hangfire, um 8.000 SMS -Nachrichten über einen Hintergrundjob zu senden. Wenn ich dies jedoch in einem einzigen Job ausführe, nimmt Heap Memory (GEN2) die Verwendung erheblich zu, wodurch der Server nicht mehr reagiert. Teilen Sie den Job in kleinere Chargen auf. Anstatt alle 8.000 Nachrichten gleichzeitig zu senden, verarbeiten i 1000 Nachrichten pro Job . Neue Hangfire-Job im Job selbst mit einer 6-Sekunden-Verzögerung , und dies wird fortgesetzt, bis alle Nachrichten verarbeitet werden.
Auch danach Ein Job abgeschlossen, Der Gen2 Heap -Speicher bleibt weiterhin und ist nicht veröffentlicht, auch nachdem GC.Collect () manuell .
Unten im Bild können Sie Zickzackmuster sehen, die jeden Hangfire -Job verarbeitet und Heap Memory Gen 2 Reste oder Erhöhungen darstellen. src = "https://i.sstatic.net/o9uaudq1.png"/>
Ich habe eine Codezeile identifiziert, die eine signifikante Zunahme des Heap -Speichers zu verursachen scheint (Gen Gen 2) In meiner Anwendung: < /p>

Code: Select all

newTracker = connection.Add(newTracker );
< /code>
Hier füge ich nur einen Tracking -Datensatz hinzu, der die Telefonnummer, die gesendete Zeit enthält, und wenn der Link in der Nachricht geklickt wurde, klicken Sie auf die Zeit. < /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>
Nachdem alle Jobs abgeschlossen sind; Das zugewiesene Heap -Gen2 -Gedächtnis bleibt, niemals veröffentlicht,  Ich bin mir nicht sicher, wann es veröffentlicht wird. Erhöhung des Diagramms (darstellen Gen 2 Heap -Speicher) tritt niemals auf: < /p>
// newTracker = connection.Add(newTracker);

S. 1: MyFirm.SmStracking Datentyp ist nicht aktiviert. Warum verursacht das Einfügen eines Datensatzes in eine C1 -Datenbank das Gen2 -Speicherwachstum?
Gibt es ein bekanntes Problem mit C1 -Datenbanken und Speicherverwaltung in C#? Operationen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post