2016-01-28 5 views
0

Я разрабатываю приложение MVC.ASP.Net. Я пытаюсь найти публичный IP-адрес соответствующей страны.Производительность: получить общедоступный IP-адрес в C#

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

Если службе требуется много времени, вы не можете много сделать it –

+1

Кэш предыдущие результаты. Используйте автономную базу данных. Увеличьте скорость вашего интернет-соединения. Купить более быстрый процессор. Улучшите свою оперативную память. – 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; 
    } 
} 
Смежные вопросы