具體需求是這樣的,從自己的資料庫里拿出屬于該用戶的顧客名單,然后再從qq郵箱里拿出該用戶45天內的發件記錄進行對比,以15天為一個小周期查詢郵件發件箱是否有顧客名單(其中顧客名單包含了最后一次發資訊的日期記錄)在里面。
我的思路是這樣的:先拿出45天的郵件,然后提取每個收件人最新的一封郵件,然后用foreach對兩個list進行匹配,看顧客名單記錄和郵件記錄相差多遠,再根據顧客時間記錄相差多少個15天進行業務處理。
那么我用的是MailKit這個控制元件進行查詢45天的郵件總量大概最少一千張左右(僅包含從qq郵箱服務器到本機獲取郵箱串列的時間)。原來大概5分鐘才能處理完畢,然后開了幾個task縮成2分鐘左右。我知道用foreach去對比兩個list是一件很蠢的事情,還有用task也不是最優解,那么誠心請問有沒有更好的辦法能縮短這個時間呢?,最后,作為新手, 各位老師在日常作業中是如何盡量把自己寫bug的概率降低到最低的呢?
uj5u.com熱心網友回復:
我覺得先作好郵件的基礎資料,可以作一個類
public class smail
{
//發件人
public string FromMail;
//收件人
public string ToMail;
//日期
public datetime MailDate;
//主題
public string title;
//內容
public string body;
}
而取郵件后生成List<smail>,并按你要對比的資訊排序,比如你按發件人查找,寫一Find方法(這種情況二分法最好),再按你的客戶名單對郵件List<smail>進行遍歷(使用Find方法),得出資訊結果,并記入客戶名單
uj5u.com熱心網友回復:
第一步我的確是和你說的辦法一樣,不過我當時檢查的時候,吃的時間比較多的主要是從根據郵件服務器uid獲取郵件真正內容上。但是用二分法的確是一個好方法。這個可以試試
uj5u.com熱心網友回復:
學到了。。。 這個我以前的實作思路和樓主一樣 資料太慢了,,,,要不要試試linq
匹配一樣的包含資料
uj5u.com熱心網友回復:
為什么要這么處理呢?獲取到郵箱后就應該持久化到資料庫,然后通過資料庫來進行比較不是更有效么?這樣不用每次都取那么多天的uj5u.com熱心網友回復:
這種想法我也有,但是想請教一下如何保證資料庫里的資訊能和郵箱里的資訊同步?因為用戶是會隨時隨地打開頁面的。
另外按照版主大人說的持久到資料庫里,那么總是會有第一次打開qq郵箱獲取郵件這個操作,那么最關鍵的從uid變成郵箱實際資訊這個轉換耗時過長的操作有沒有什么好的方法?
uj5u.com熱心網友回復:
請問一下是并行linq嗎?
uj5u.com熱心網友回復:
job定時同步,不需要用戶第一次打開轉載請註明出處,本文鏈接:https://www.uj5u.com/net/155144.html
標籤:C#
上一篇:求助c#winform程式!!
