【问题标题】:Memory leak is seen when SmtpClient send function called multiple times多次调用 SmtpClient 发送函数时出现内存泄漏
【发布时间】:2018-03-29 02:34:42
【问题描述】:

我必须多次发送邮件,当使用 smtpclient 类多次发送邮件时,内存急剧增加......

我已经尝试过以下事情...... - 调用 MailMessage、smtpclient 的 dispose 方法 - 手动调用 GC.collect 方法 没有任何帮助...

using System;
using System.Net.Mail;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
 public partial class Form1 : Form
 {
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
       try
        {
            MailMessage mail = new MailMessage();
            using (var smtpobj = new SmtpClient("smtp.gmail.com"))
            {
                mail.To.Add("xxx@gmail.com");
                mail.From = new MailAddress("yyy@gmail.com");
                mail.Subject = "subject - .net app";
                mail.Body = "body";
                smtpobj.Port = 587;
                smtpobj.Credentials = new System.Net.NetworkCredential("yyy@gmail.com", "xyz");
                smtpobj.EnableSsl = true;
                smtpobj.Send(mail);
            }
        }
        catch(Exception ex)
        {
            string strReturn = ex.ToString();
            MessageBox.Show(strReturn);
        }
    }
}

}

【问题讨论】:

标签: c#


【解决方案1】:

尝试以下方法:

using System;
using System.Net.Mail;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
 public partial class Form1 : Form
 {
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
       try
        {
            MailMessage mail = new MailMessage();
            using (var smtpobj = new SmtpClient("smtp.gmail.com"))
            {
                mail.To.Add("xxx@gmail.com");
                mail.From = new MailAddress("yyy@gmail.com");
                mail.Subject = "subject - .net app";
                mail.Body = "body";
                smtpobj.Port = 587;
                smtpobj.Credentials = new System.Net.NetworkCredential("yyy@gmail.com", "xyz");
                smtpobj.EnableSsl = true;
                smtpobj.Send(mail);
                smtpobj.ServicePoint.CloseConnectionGroup( 
                        smtpobj.ServicePoint.ConnectionName);
            }
        }
        catch(Exception ex)
        {
            string strReturn = ex.ToString();
            MessageBox.Show(strReturn);
        }
    }
  }
}

这是:https://social.msdn.microsoft.com/Forums/vstudio/en-US/28b59c25-bc93-4285-860d-52f1f49d2d43/net-smtp-class-memory-leakage?forum=netfxbcl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多