2016-01-28 75 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; 
    } 
}