亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#中通過LRU實現通用高效的超時連接探測

2019-10-29 19:41:24
字體:
來源:轉載
供稿:網友

編寫網絡通訊都要面對一個問題,就是要把很久不存活的死連接清除,如果不這樣做那死連接最終會占用大量內存影響服務運作!在實現過程中一般都會使用ping,pong原理,通過ping,pong來更新連接的時效性,最后通過掃描連接列表來清除掉。雖然這種做法比較簡單,但很難抽取出通用性的封裝,掃描整個列表復雜度也比較高。以下講解如何通過LRU算法實現一個通用高效的探測超時連接功能類。

什么是LRU

在這里還是要大概介紹一下LRU,LRU算法的設計原則是:如果一個數據在最近一段時間沒有被訪問到,那么在將來它被訪問的可能性也很小.也就是說,當限定的空間已存滿數據時,應當把最久沒有被訪問到的數據淘汰.當然在這里并不需要使用到自動淘汰機制,只需要把未位到達超時的連接清除即可。

在C#中如何實現LRU

C#并不存在這樣的數據結構,不過有一個結構很適合實現LRU,這個結構就是LinkedList雙向鏈表,通過以下結構圖就容易理解通過LinkedList實現LRU

C#,LRU,超時,連接

通過LinkedList的功能我們可以把活越項先移出來,然后再把項移到頭部。在這里需要注意LinkedList的Remove方法,它有兩個重載版本,兩個版本的復雜度不一樣。一個是O(n)一個是O(1)所以使用上一定要注意,否則在數據多的情況下效率差別巨大(這些細節都可以通過源代碼來查看)!

代碼實現

前面已經大概講述的原理,接下來要做的就是代碼實現了。第一步需要制訂一個基礎可控測對象規則接口,這樣就可以讓現有的已經實現的功能實現它并可得到相關功能的支持。

public interface IDetector  {    double ActiveTime    { get; set; }    LinkedListNode<IDetector> DetectorNode    {      get;      set;    }  }

接口定義了兩個屬性,一個是最近活越時間,另一個就是LinkedListNode<IDetector>這個屬性比交關鍵,通過LinkedListNode<IDetector>可以讓LinkedList在Remove時復雜度為O(1).接下來就要針對基于LRU算法處理超時制定一個應用規則

 public interface ILRUDetector  {    void Update(IDetector item);    void Detection(int timeout);    double GetTime();    Action<IList<IDetector>> Timeout { get; set; }  }

規則也是比較簡單,Update用于更新跟蹤對象,一般在處理接受ping或pong包后進行調用;Detection方法是探測超出指定時間的對象,時間當位是毫秒,如果存在有超時的對象則觸發Timeout事件;GetTime是獲取探測器已經運行的時間單位毫秒!規則定好了那接著要做的事實就是要實現它:

 class LRUDetector : ILRUDetector, IDisposable  {    public LRUDetector()    {      mTimeWatch = new System.Diagnostics.Stopwatch();      mTimeWatch.Restart();    }    private Buffers.XSpinLock xSpinLock = new Buffers.XSpinLock();    private System.Diagnostics.Stopwatch mTimeWatch;    private LinkedList<IDetector> mItems = new LinkedList<IDetector>();    public Action<IList<IDetector>> Timeout    {      get; set;    }    public void Detection(int timeout)    {      double time = GetTime();      List<IDetector> result = new List<IDetector>();      using (xSpinLock.Enter())      {        LinkedListNode<IDetector> last = mItems.Last;        while (last != null && (time - last.Value.ActiveTime) > timeout)        {          mItems.Remove(last);          result.Add(last.Value);          last.Value.DetectorNode = null;          last = mItems.Last;        }      }      if (Timeout != null && result.Count > 0)        Timeout(result);    }    public void Update(IDetector item)    {      using (xSpinLock.Enter())      {        if (item.DetectorNode == null)          item.DetectorNode = new LinkedListNode<IDetector>(item);        item.ActiveTime = GetTime();        if (item.DetectorNode.List == mItems)          mItems.Remove(item.DetectorNode);        mItems.AddFirst(item);      }    }    public void Dispose()    {      mItems.Clear();    }    public double GetTime()    {      return mTimeWatch.Elapsed.TotalMilliseconds;    }  }

代碼并不復雜,相信不用過多解釋也能看懂相關操作原理。

測試

既然功能已經實現,接下來就要對代碼進行測試看運行效果。測試代碼比較簡單首先開啟一個Timer定時執行Detection,另外開一個線程去調用Update方法

class Program  {    public class TestDetector : IDetector    {      public double ActiveTime { get; set; }      public string Name { get; set; }      public LinkedListNode<IDetector> DetectorNode { get; set; }    }    static void Main(string[] args)    {      LRUDetector lRUDetector = new LRUDetector();      lRUDetector.Timeout = (items) =>      {        foreach (TestDetector item in items)          Console.WriteLine($"{(item.Name)} timeout {lRUDetector.GetTime() - item.ActiveTime}ms");      };      System.Threading.Timer timer = null;      timer = new System.Threading.Timer(o =>      {        timer.Change(-1, -1);        lRUDetector.Detection(5000);        timer.Change(5000, 5000);      }, null, 5000, 5000);      System.Threading.ThreadPool.QueueUserWorkItem(o =>      {        int i = 0;        while (true)        {          System.Threading.Thread.Sleep(500);          i++;          TestDetector testDetector = new TestDetector();          testDetector.Name = "my name is " + i;          lRUDetector.Update(testDetector);        }      });      Console.Read();    }  }

運行效果:

C#,LRU,超時,連接

以上所述是小編給大家介紹的C#中通過LRU實現通用高效的超時連接探測,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久国产影院| 国产在线一区二区三区| www.国产精品一二区| 91中文字幕在线观看| 成人乱色短篇合集| 欧美伊久线香蕉线新在线| 久久影院资源网| 国产va免费精品高清在线| 国产精品91免费在线| 日韩成人在线免费观看| 国产噜噜噜噜噜久久久久久久久| 成人乱人伦精品视频在线观看| 精品视频偷偷看在线观看| 亚洲网址你懂得| 国产精品va在线播放| 日韩男女性生活视频| 国产精品第2页| 欧美视频在线观看 亚洲欧| 亚洲aⅴ日韩av电影在线观看| 久久久久久有精品国产| 久久久久久中文| 免费91麻豆精品国产自产在线观看| 国产精品一区二区三区在线播放| 国产成人精品国内自产拍免费看| 日韩在线视频观看正片免费网站| 精品国产91久久久久久老师| 77777少妇光屁股久久一区| 欧美视频在线免费| 性欧美在线看片a免费观看| 国产精品极品在线| 亚洲国产精品久久久| 国产精品入口日韩视频大尺度| 成人自拍性视频| 亚洲欧美国产va在线影院| 日韩美女av在线免费观看| 色www亚洲国产张柏芝| 日韩精品视频在线观看免费| 国产精品伦子伦免费视频| 久久免费视频在线| 一区三区二区视频| 在线电影欧美日韩一区二区私密| 7777精品久久久久久| 国产自产女人91一区在线观看| 亚洲影视九九影院在线观看| 亚洲精品欧美日韩专区| 成人黄色在线播放| 97国产精品人人爽人人做| 亚洲第一国产精品| 中文字幕精品国产| 欧美日韩亚洲国产一区| 亚洲国产欧美在线成人app| 国产精品午夜一区二区欲梦| 曰本色欧美视频在线| 欧美制服第一页| 亚洲性猛交xxxxwww| 久久这里有精品| 57pao国产成人免费| 欧美xxxx做受欧美| 亚洲国产精彩中文乱码av在线播放| 成人动漫网站在线观看| 日韩国产精品亚洲а∨天堂免| 久久久久久久久久久人体| 欧洲中文字幕国产精品| 国产一区二区香蕉| 久久精品小视频| 欧美激情欧美激情| 日韩中文字幕在线| 日韩欧美中文第一页| 国产精品h片在线播放| 日韩专区中文字幕| 高清在线视频日韩欧美| 久久精品国产欧美亚洲人人爽| 欧洲成人免费视频| 国产剧情日韩欧美| 中文字幕久久精品| 精品一区二区三区电影| 国产丝袜一区二区三区免费视频| 亚洲国产精彩中文乱码av| 日本电影亚洲天堂| 亚洲国产欧美久久| 最近2019中文字幕大全第二页| 国产精品视频免费观看www| 欧美成人精品h版在线观看| 国产精品久久综合av爱欲tv| 日韩有码在线观看| 狠狠躁夜夜躁人人爽天天天天97| 国产这里只有精品| 成人黄色av网| 成人国产精品久久久| 国产在线播放不卡| 日韩电影免费在线观看中文字幕| 国产精品福利网| 国自产精品手机在线观看视频| 久久精品电影网站| 2019亚洲日韩新视频| 在线观看视频亚洲| 欧美大胆a视频| 日韩亚洲成人av在线| 欧美国产高跟鞋裸体秀xxxhd| 成人久久久久久久| 97久久超碰福利国产精品…| 97视频网站入口| 久久综合九色九九| 揄拍成人国产精品视频| 成人免费视频97| 欧美性感美女h网站在线观看免费| 91亚洲精品久久久久久久久久久久| 国产成人精品免高潮在线观看| 日韩中文字幕精品| 国产精品69精品一区二区三区| 亚洲影影院av| 亚洲三级 欧美三级| 欧美大片免费看| zzijzzij亚洲日本成熟少妇| 狠狠躁18三区二区一区| 91免费精品视频| 成人国产精品一区| 国产精品精品视频| 欧美日韩高清区| 国产一区二中文字幕在线看| 成人伊人精品色xxxx视频| 久久久久久久影视| 亚洲欧美在线免费| 亚洲精品在线视频| 亚洲xxxx视频| 亚洲午夜激情免费视频| 国产999精品久久久| 欧美精品在线免费播放| 96精品久久久久中文字幕| 亚洲欧洲国产一区| 91在线精品播放| 国语自产精品视频在线看一大j8| 一本色道久久综合狠狠躁篇的优点| 国产成人福利网站| 国产精品久久久久久久一区探花| 在线视频亚洲欧美| 日韩亚洲成人av在线| 色久欧美在线视频观看| 亚洲新声在线观看| 国产日韩精品在线观看| 久久99久久99精品中文字幕| 欧美激情啊啊啊| 欧美与黑人午夜性猛交久久久| 亚洲天堂男人天堂| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲一区二区久久久久久久| 欧美一级视频一区二区| 国产精品99久久久久久人| 国产精品99免视看9| 日韩av免费观影| 97成人超碰免| 亚洲xxx自由成熟| 91久久国产精品91久久性色| 日韩免费看的电影电视剧大全| 91精品成人久久| 亚洲欧美综合精品久久成人| 日韩欧美国产免费播放| 亚洲视频自拍偷拍| 久久久电影免费观看完整版| 午夜精品久久久久久久久久久久| 国产在线视频一区| 国产欧美久久一区二区| 欧美精品第一页在线播放| 尤物九九久久国产精品的特点|