接收邮件超时

mbh0210 2009-10-27 03:23:49
最近写了一个接收邮件的,使用retr获取邮件的时候,在读取网络流的时候老是超时之类的,
执行下一条指令的时候老是报错,但是我用telnet下执行就一切正常。

还有就是NetworkStream获取内容的速度真是慢,有没有好的解决方法?
...全文
395 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mbh0210 2009-10-28
  • 打赏
  • 举报
回复
Read方法每次读的数据块大小也会影响你的接收速度 ,这个是肯定的了

FBugFramework 2009-10-28
  • 打赏
  • 举报
回复
ReadToEnd 好歹他没用使用到缓存。
在读取少量数据时,说他性能最佳,我觉得是完全有道理。

你想想如果是在读G级别的文件,ReadToEnd就绝对说不上好了(它肯定都是先读到你内存中)。此时,BufferedStream 类应该是接收数据的首选。

Read方法每次读的数据块大小也会影响你的接收速度。不信可试试。
cszg_zjy 2009-10-28
  • 打赏
  • 举报
回复
帮顶下。。。。楼主太大方了
Neil198 2009-10-28
  • 打赏
  • 举报
回复
留个痕迹。。
mbh0210 2009-10-28
  • 打赏
  • 举报
回复
看了msdn这一段
当需要从流的当前位置到末尾读取所有输入时,ReadToEnd 的性能最佳。如果需要对从流中读取的字符数进行进一步的控制,请使用 Read(Char[],Int32,Int32) 方法重载,它通常可达到更佳的性能。

还是直接使用NetworkStream read比较快啊
tiandiyouwo1 2009-10-28
  • 打赏
  • 举报
回复
试试memorystream
FBugFramework 2009-10-28
  • 打赏
  • 举报
回复
用这个方法试试, 它在接收大数据时会很耗内存,几M以下的应该是没问题的。
List<Byte> bufList = new List<byte>();

大量的数据应该输出到文件流,或其他设备中。不应该直接放到内存里。


private bool ReceiveStream(NetworkStream stream, ref byte[] origBuf, out byte[] outBuf)
{
outBuf = null;

if (!stream.DataAvailable)
{
return false;
}

List<Byte> bufList = new List<byte>();
int total = 0;
while (stream.DataAvailable)
{
int len = this.TryReceive(stream, origBuf, 0, m_BufSize);
if (len <= 0)
{
break;
}

bufList.AddRange(origBuf);
total += len;
if (len < m_BufSize)
{
bufList.RemoveRange(total, m_BufSize - len);
break;
}
}

if (total == 0)
{
return false;
}

this.ReWaitingTimer();

outBuf = bufList.ToArray();
return true;
}
/// <summary>
/// TryReceive
/// </summary>
/// <param name="stream"></param>
/// <param name="origBuf"></param>
/// <param name="outBuf"></param>
/// <returns></returns>
private int TryReceive(NetworkStream stream, byte[] buffer, int offset, int size)
{
//try
//{
//}
//catch (IOException)
//{
//}

//Array.Clear(buffer, offset, size);
return stream.Read(buffer, offset, size);
}

mbh0210 2009-10-28
  • 打赏
  • 举报
回复
对的,我是使用ReadToEnd读取的,速度超慢
FBugFramework 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 mbh0210 的回复:]
最近写了一个接收邮件的,使用retr获取邮件的时候,在读取网络流的时候老是超时之类的
执行下一条指令的时候老是报错,但是我用telnet下执行就一切正常。

还有就是NetworkStream获取内容的速度真是慢,有没有好的解决方法?
[/Quote]


应该是接收的过程没写好吧, 最初我在写通讯的时候也碰到过; 就是在使用NetworkStream.Read(buf,pos,size)的时候。
mbh0210 2009-10-27
  • 打赏
  • 举报
回复
up
zhouyanfss 2009-10-27
  • 打赏
  • 举报
回复
广告占位
LutzMark 2009-10-27
  • 打赏
  • 举报
回复
可以用断点续传来搞...不过比较麻烦

yyhlove 2009-10-27
  • 打赏
  • 举报
回复
配置文件里改下
l13864860169 2009-10-27
  • 打赏
  • 举报
回复
asdfsda
mbh0210 2009-10-27
  • 打赏
  • 举报
回复
顶下
zl194 2009-10-27
  • 打赏
  • 举报
回复
呵呵,谁敢接独孤的招啊。等着看了!

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧