首页 新闻 会员 周边 捐助

关于 System.OutOfMemoryException

1
悬赏园豆:20 [已解决问题] 解决于 2015-04-28 18:53

//为每一个 EmailinfoInfo 分配线程

foreach (EmailinfoInfo info in list)

{

handleGroup.QueueWorkItem(DataThreadHandle, sendConfigInfo, WorkItemPriority.BelowNormal);

}

//线程处理的事情

 protected virtual void DataThreadHandle(MailSendConfigInfo info)

{

sended = helper.Send();

}

public bool Send()
{

Mail_Message m = Create_PlainText_Html_Attachment_Image(toList, ccList, bccList, unifiedReplyTo, unifiedDisplayName, subject, body, attachments, notifyEmail, plaintTextTips);
using (MemoryStream stream = new MemoryStream())
{
m.ToStream(stream, new MIME_Encoding_EncodedWord(MIME_EncodedWordEncoding.Q, Encoding.UTF8), Encoding.UTF8);
stream.Position = 0;
client.SendMessage(stream);

sended = true;
}

}

每封邮件大小在20M左右 同时间大概有40~80封  一开始能正常运行 但是时间久了就会报错

System.OutOfMemoryException  为什么??!!!

C#
xuliyuan173的主页 xuliyuan173 | 菜鸟二级 | 园豆:249
提问于:2015-03-07 15:39
< >
分享
最佳答案
1

问题可能出现在 m.ToStream() 的实现代码中

收获园豆:10
dudu | 高人七级 |园豆:30925 | 2015-03-07 15:42

能详细的说一下嘛?

xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-03-07 15:58

@xuliyuan173: 在.ToStream中是如何将内容复制到MemoryStream中的?

dudu | 园豆:30925 (高人七级) | 2015-03-07 16:23

@dudu: 

//
// 摘要:
// Store MIME enity to the specified stream.
//
// 参数:
// stream:
// Stream where to store MIME entity. Storing starts form stream current position.
//
// headerWordEncoder:
// Header 8-bit words ecnoder. Value null means that words are not encoded.
//
// headerParmetersCharset:
// Charset to use to encode 8-bit header parameters. Value null means parameters
// not encoded.
//
// 异常:
// System.ArgumentNullException:
// Is raised when stream is null.
public void ToStream(Stream stream, MIME_Encoding_EncodedWord headerWordEncoder, Encoding headerParmetersCharset);

 

这个是lumisoft封装的方法

xuliyuan173 | 园豆:249 (菜鸟二级) | 2015-03-08 09:36
其他回答(1)
1

推荐使用CLRProfiler跟踪观察一下内存使用情况,找到Gen2代的对象占用内存总量和明细,尤其是大于等于85000Byte的对象。"每封邮件大小在20M左右",20M这个数字对应用程序而言可算是非常的惊人。关于CLRProfiler和OOM,可以参考这篇这篇文章。

收获园豆:10
JeffWong | 园豆:2328 (老鸟四级) | 2015-03-07 15:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册