Mam aplikację WinForms i próbuję uzyskać odwrotne wpisy DNS dla listy adresów IP wyświetlanych w formularzu.GetHostEntry jest bardzo powolny
Główny problem Zabrakło mi na to System.Net.Dns.GetHostEntry jest śmiesznie powolna, szczególnie, gdy nie reverse DNS znajduje się wpis. W przypadku prostego systemu DNS powinno to być szybkie, ponieważ serwer DNS zwróci NXDOMAIN. Wewnętrznie nazywa się ws2_32.dll getnameinfo(), która stwierdza "Rozpoznawanie nazw może być przez system nazw domen (DNS), lokalny plik hosts lub przez inne mechanizmy nazewnictwa" - więc zakładam, że to "inne mechanizmy nazewnictwa" powodują, że być tak powolnym, ale czy ktoś wie, jakie są te mechanizmy?
Generalnie to bierze 5 sekund na IP, chyba że stwierdzi odwrotną pozycję, a potem to niemal natychmiastowe. Częściowo pracowałem nad tym przy użyciu wątków, ale ponieważ robię dużą listę i mogę uruchamiać tylko wiele wątków naraz, to i tak zajmie im to trochę czasu.
Czy istnieje lepszy sposób na znalezienie wpisy reverse DNS, że będzie szybciej?
Właściwie skorzystałem z tej wersji. Skutecznie omija problem z przekroczeniem limitu czasu. Mój problem polega bardziej na tym, że musi upłynąć trochę czasu. Idź uruchomić nslookup lub wykop w wierszu poleceń z przypadkowym adresem IP - zwykle powróci w ciągu <1 s i powie "*** serwer.pf.local nie może znaleźć 42.23.1.42: Nieistniejąca domena" (lub NXDOMAIN, w przypadku wykopywania) - Zastanawiam się, dlaczego GetHostEntry() nie działa w ten sam sposób. – gregmac
Wierzę, że możesz osiągnąć to, co chcesz, poprzez P/Invoke, używając różnych flag niż domyślne w getnameinfo. Zobacz moją edycję. –