Domanda

Ho un servizio di Windows, che è configurato per inviare e-mail in una pianificazione predefinita. Il programma funziona con System.Timers.Timer e ogni volta che il Timer_Elapsed è sollevata io chiamo Timer.Stop (), inviare e-mail (ogni volta circa 1500 e-mail), calcolare la quantità di tempo che il segno di spunta accanto sarà sollevata e avviare il timer ( chiamando il metodo Timer.Start ()). Il problema è quando il timer è trascorso e il processo è iniziato l'invio di email, la memoria in uso aumenta, ma non diminuisce dopo aver terminato. Quando chiamo la funzione in un'applicazione "non temporizzato", la memoria utilizzata viene liberato dopo aver terminato processo di invio. Qualcuno mi può aiutare a capire perché questo sta succedendo? Forse c'è qualcosa che riguarda una discussioni utilizzati nei timer?

Grazie in anticipo.

È stato utile?

Soluzione

Ci sono alcune possibilità blatent qui.

  1. garbage collection non ha preso a calci in e non c'è perdita di memoria. Monitorare nel tempo per vedere come l'utilizzo della memoria dinamica è e vedere se i picchi e si deposita.

  2. Non si sta utilizzando funzioni vicino o filo della biblioteca

  3. Il timer sta iniziando un thread che non termina. Questo è facile da vedere con un monitor di processo e guardare i conteggi del filetto.

Le perdite di memoria, anche se non impossibile con qualsiasi mezzo, sono improbabili in linguaggi .NET. Non si accede direttamente o di controllo della memoria. Dal momento che il JIT fa l'allocazione di memoria e di compensazione tutti si ha realmente bisogno di controllare per le cose è non essere liberati nel codice.

Senza specifiche non posso dare una migliore aiuto, soprattutto senza sapere se si sta facendo il file IO etc.

Altri suggerimenti

È necessario chiudere il collegamento oggetto SMTPClient per evitare perdite di memoria.

SmtpClient client = new SmtpClient ( "SMTPServerAddress"); ... client.Send (messaggio); client.ServicePoint.CloseConnectionGroup (client.ServicePoint.ConnectionName);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top