做一个从邮件服务器接受邮件的客户端,从服务器上读邮件。
刚开始只是接受简单的文本邮件所以把每个邮件都读到一个string里面,然后在split()成很多行,再根据邮件格式来解析邮件,
最后把邮件的各个项都存到数据库去。
现在发现如果邮件的附件比较大,这个string的长度就很大,可能被撑爆掉了。
这个时候应该怎么办才好?
一行一行的读,每行都放到一个string数组去?

解决方案 »

  1.   

    string会被撑爆?
    那RichTextBox的rtf不是更要爆了
    我记得好像字符串是最大2亿字节,不知道是不是说c#的字符串
      

  2.   

    从服务器上读取的代码还没改,但是从outlook express的存储文件读取邮件的时候,把所有信息塞到string里面去,
    邮件比较大的时候就出问题了
      

  3.   

    哪位大哥来给个思路呢,string就算够用,如果文件很大的话效率上也会很慢吧?
      

  4.   

    数据库的对应字段类型设置为text不行吗?
      

  5.   

    肯定是分开读,一次性读出来的设计不好,就算string不出问题,进程本身的内存是有限制的。而且读到内存再操作,当内存的量太大的时候效率是很低的。
    对于邮件的大小,没有办法控制,举一个极端的边界,你处理邮件的程序应该是并发的,当所有同时处理的邮件大小大于了1.5g的时候,你的程序就当掉了。
    分而治之,是保证系统稳定运行的一个办法。
      

  6.   

    而且一个邮件还好,如果从outlook express批量导入的话就更慢了,我看thunder bird,dream mail导入的那叫一个快啊~
    不过thunder bird只是保存原文件,我是解析了再存到数据库去~
      

  7.   

    今天试着读了个700k的文本到string,差点就死机了,机器太破了~
      

  8.   

    你可以先保存到磁盘,然后读文件,再写入数据库。读文件可以一块块读的。
    用一个线程去下载邮件保存成文件,多个线程去读文件解析文件并保存数据到数据库。这样效率应该会比较高,IO慢主要是写和锁,这样写只有一个线程,读的话每个线程处理的一个文件,这样尽可能避免IO冲突。