新手请教,如果从qq邮箱的服务器里获取一定数量的邮件的时候,耗时过长应该如何解决

liiangyuch 2019-06-11 08:34:52
具体需求是这样的,从自己的数据库里拿出属于该用户的顾客名单,然后再从qq邮箱里拿出该用户45天内的发件记录进行对比,以15天为一个小周期查询邮件发件箱是否有顾客名单(其中顾客名单包含了最后一次发信息的日期记录)在里面。
我的思路是这样的:先拿出45天的邮件,然后提取每个收件人最新的一封邮件,然后用foreach对两个list进行匹配,看顾客名单记录和邮件记录相差多远,再根据顾客时间记录相差多少个15天进行业务处理。
那么我用的是MailKit这个控件进行查询45天的邮件总量大概最少一千张左右(仅包含从qq邮箱服务器到本机获取邮箱列表的时间)。原来大概5分钟才能处理完毕,然后开了几个task缩成2分钟左右。我知道用foreach去对比两个list是一件很蠢的事情,还有用task也不是最优解,那么诚心请问有没有更好的办法能缩短这个时间呢?,最后,作为新手, 各位老师在日常工作中是如何尽量把自己写bug的概率降低到最低的呢?
...全文
395 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
job定时同步,不需要用户第一次打开
liiangyuch 2019-06-12
  • 打赏
  • 举报
回复
引用 3 楼 一个武小猴子 的回复:
学到了。。。 这个我以前的实现思路和楼主一样 数据太慢了,,,,要不要试试linq匹配一样的包含数据
请问一下是并行linq吗?
liiangyuch 2019-06-12
  • 打赏
  • 举报
回复
引用 4 楼 娃都会打酱油了 的回复:
为什么要这么处理呢?获取到邮箱后就应该持久化到数据库,然后通过数据库来进行比较不是更有效么?这样不用每次都取那么多天的
这种想法我也有,但是想请教一下如何保证数据库里的信息能和邮箱里的信息同步?因为用户是会随时随地打开页面的。 另外按照版主大人说的持久到数据库里,那么总是会有第一次打开qq邮箱获取邮件这个操作,那么最关键的从uid变成邮箱实际信息这个转换耗时过长的操作有没有什么好的方法?
  • 打赏
  • 举报
回复
为什么要这么处理呢?获取到邮箱后就应该持久化到数据库,然后通过数据库来进行比较不是更有效么?这样不用每次都取那么多天的
一个武术猴子 2019-06-12
  • 打赏
  • 举报
回复
学到了。。。 这个我以前的实现思路和楼主一样 数据太慢了,,,,要不要试试linq匹配一样的包含数据
liiangyuch 2019-06-12
  • 打赏
  • 举报
回复
引用 1 楼 jx315425246 的回复:
我觉得先作好邮件的基础数据,可以作一个类

public class smail
{
    //发件人
    public string FromMail;
    //收件人
    public string ToMail;
    //日期
    public datetime MailDate;
    //主题
    public string title;
    //内容
    public string body;
}
而取邮件后生成List<smail>,并按你要对比的信息排序,比如你按发件人查找,写一Find方法(这种情况二分法最好),再按你的客户名单对邮件List<smail>进行遍历(使用Find方法),得出信息结果,并记入客户名单
第一步我的确是和你说的办法一样,不过我当时检查的时候,吃的时间比较多的主要是从根据邮件服务器uid获取邮件真正内容上。但是用二分法的确是一个好方法。这个可以试试
jx315425246 2019-06-12
  • 打赏
  • 举报
回复
我觉得先作好邮件的基础数据,可以作一个类

public class smail
{
//发件人
public string FromMail;
//收件人
public string ToMail;
//日期
public datetime MailDate;
//主题
public string title;
//内容
public string body;
}


而取邮件后生成List<smail>,并按你要对比的信息排序,比如你按发件人查找,写一Find方法(这种情况二分法最好),再按你的客户名单对邮件List<smail>进行遍历(使用Find方法),得出信息结果,并记入客户名单

110,538

社区成员

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

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

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