Проверка почты в потоке петли выходит из памяти - PullRequest
0 голосов
/ 14 мая 2019

Я использую задачу CheckMail для проверки почты каждые 15 секунд.Каждый раз, когда эта задача повторяется, память увеличивается.В чем проблема?Я ничего не создаю.

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

            class MailCheckThread
                {
                    private ImapClient Client;
                    private List<string> Senders;

                    //Thread
                    private Task CheckMail;

                    public MailCheckThread()
                    {
                        Client = new ImapClient("imap.gmail.com", 993, Hemail, Hpassword, AuthMethod.Login, true);
                        Senders = APM_SharedClasses.MailSender.Sender();
                        MailTimer_Thread();
                        Console.WriteLine("Creating mail check thread!");
                        CheckMail.Start();
                    }

            private void MailTimer_Thread()
                    {
                        CheckMail = new Task(() =>
                        {
                            while (true)
                            {
                                IEnumerable<uint> uids = Client.Search(
                                SearchCondition.From(Senders[0]));

                                if (uids.Count() > 0)
                                {
                                    MailMessage msg = Client.GetMessage(uids.First());

                                    Console.WriteLine($"Message from : {msg.From} | Subject : {msg.Subject} | Body : {msg.Body}");
                                }
                                Thread.Sleep(15000);
                            }
                        });
                    }
            }

Как я могу оптимизировать код в этом случае?Что я делаю не так?

1 Ответ

0 голосов
/ 15 мая 2019

Память исходит от вашего объекта MailMessage. Вы должны утилизировать его, когда закончите.

...