2016-01-28 110 views
0

我正在開發一個MVC.ASP.Net應用程序。我正在嘗試查找各個國家的公共IP地址。性能:獲取C#中的公共IP地址#

Public static string GetIP() 
{ 
    string IPAddress = null; 


    IPAddress = WDA.CMS.Services.CacheService.getPublicIP; 

    using (System.Net.WebClient wc = new System.Net.WebClient()) 
    { 
     // Take long time to respond. 
     IPAddress = wc.DownloadString("http://icanhazip.com/"); 
    } 

    if (!string.IsNullOrEmpty(IPAddress)) 
    { 
     System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("(\\d{1,3}\\.){3}\\d{0,3}"); 
     if (IPAddress != null) 
     { 
      if (regex.IsMatch(IPAddress)) 
      { 
       IPAddress = regex.Match(IPAddress).Value.ToString(); 
      } 
      else 
      { 
       IPAddress = ""; 
      } 
      regex = null; 
     } 

    } 

    return IPAddress; 
} 

//在美國的情況:209.105.127.206

此功能工作正常,但我想,以提高響應時間,這個函數被調用多次。是否可以修改此函數以更快地檢索結果。任何幫助/建議將不勝感激。

+3

這聽起來有點愚蠢,但你的公共ip保持大多數時間不變嗎?我只會嘗試下載一次,並將其緩存在某處,如果它發生變化,請將其存儲爲時間戳,然後每n分鐘/天嘗試一次 –

+0

如果服務需要很長時間才能回答,則您可以做的事情不多它 –

+1

緩存以前的結果。使用離線數據庫。增加您的互聯網連接速度。購買更快的CPU。改進你的RAM。 – dotctor

回答

1

緩存它。即

static string myip; 
static DateTime ipstamp; 
... 
if(myip == null||DateTime.Now-ipstamp> TimeSpan.FromHours(10)) 
{ 
    using (System.Net.WebClient wc = new System.Net.WebClient()) 
    { 
     // Take long time to respond. 
     myip = wc.DownloadString("http://icanhazip.com/"); 
     ipstamp = DateTime.Now; 
    } 
}