检查循环线程中的邮件内存不足

时间:2019-05-14 19:15:08

标签: c# memory-management task imap

我正在使用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 :(得分:0)

内存来自您的MailMessage对象。完成后,需要将其处置。