У меня есть приложение, над которым я работаю, и оно может медленно запуститься, когда мой провайдер не работает из-за DNS. Мой провайдер вчера отключался на 3 часа, поэтому я не особо задумывался об этом куске кода, который добавил, пока не обнаружил, что запуск всегда медленный. Этот код должен возвращать ваш IP-адрес, и мое прочтение ссылки предполагает, что оно должно быть немедленным, но это не так, по крайней мере на моем компьютере.
О, и вчера, прежде чем интернет отключился, я обновил (oymoron) до XP SP3, и у меня были другие проблемы.
Так что мои вопросы / просьба:
- Я правильно делаю?
- Если вы запустите это на своем компьютере, потребуется ли 39 секунд, чтобы вернуть ваш IP-адрес? Это на моем.
Еще одно замечание: я сделал захват пакета, и первый запрос НЕ поступил по проводам, а второй сделал и получил быстрый ответ. Так что вопрос в том, что случилось в XP SP3, чего мне не хватает, кроме мозга.
Последнее замечание. Если я разрешу полное доменное имя, все будет хорошо.
Public Class Form1
'http://msdn.microsoft.com/en-us/library/system.net.dns.gethostaddresses.aspx
'
'excerpt
'The GetHostAddresses method queries a DNS server
'for the IP addresses associated with a host name.
'
'If hostNameOrAddress is an IP address, this address
'is returned without querying the DNS server.
'
'When an empty string is passed as the host name,
'this method returns the IPv4 addresses of the local host
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim stpw As New Stopwatch
stpw.Reset()
stpw.Start()
'originally Dns.GetHostEntry, but slow also
Dim myIPs() As System.Net.IPAddress = System.Net.Dns.GetHostAddresses("")
stpw.Stop()
Debug.WriteLine("'" & stpw.Elapsed.TotalSeconds)
If myIPs.Length > 0 Then Debug.WriteLine("'" & myIPs(0).ToString)
'debug
'39.8990525
'192.168.1.2
stpw.Reset()
stpw.Start()
'originally Dns.GetHostEntry, but slow also
myIPs = System.Net.Dns.GetHostAddresses("www.vbforums.com")
stpw.Stop()
Debug.WriteLine("'" & stpw.Elapsed.TotalSeconds)
If myIPs.Length > 0 Then Debug.WriteLine("'" & myIPs(0).ToString)
'debug
'0.042212
'63.236.73.220
End Sub
End Class