2016-04-04 12 views
-2
InetAddress localhost = null; 
try { 
    localhost = InetAddress.getLocalHost(); 
} catch (UnknownHostException ex) { 
    /* Purposely empty */ 
} 

byte[] ip = localhost.getAddress(); 
int i = 1; 
while (i <= 254) { 
    ip[3] = (byte) i; 
    InetAddress address = null; 
    try { 
     address = InetAddress.getByAddress(ip); 
    } catch (UnknownHostException ex) { 
     /* Purposely empty */ 
    } 

    String HostName = address.getHostName(); 
    if (!address.getHostAddress().equals(address.getHostName())) { 
     list.addElement(HostName); 
    } 
    i++; 
} 

(ich habe Probleme die Laufzeit lang ist. Wie kann ich die Laufzeit in diesem Code reduzieren)Wie kann ich die Laufzeit dieses Codes reduzieren?

+0

nur eine Frage, warum verwenden, während wenn Sie für verwenden können? – Moshe9362

+8

DNS-Auflösung ist durch Latenz gebunden und im Grunde nichts anderes. Parallele es. –

+0

Gemäß der Dokumentation führt getByAddress (byte []) keine umgekehrte Namensdienstsuche durch. – aventurin

Antwort

0

hatte ich ein ähnliches Problem Adressen denen Netzwerk-Lookups für IP. Das Problem der Netzwerk-Latenz ist genau wie "dieser andere Typ" sagte ... es wird vom Netzwerk getrieben. Wie lange und wie viele Hops dauert es bis zum Ziel?

Die einzige Lösung, die ich fand, war das Ausfädeln der Lookups, InetAddress.getByAddress (ip) in Ihrem Fall. Meine Lösung bestand darin, einen ExecutorService mit 10 Threads einzurichten. Packen Sie jede InetAddress.getByAddress (IP) in eine Callable. Überwachen Sie das Callable für den Abschluss. pack ein anderes und starte es. Werfen Sie einen Blick auf eine meiner Fragen zu diesem Forum zu diesem Thema bezogen werden:

ExecutorService - How to set values in a Runnable/Callable and reuse

mit dem ExecutorService vorsichtig sein (wie ich herausgefunden habe). Die Anzahl der Threads hängt wirklich von der Anzahl der CPUs (Power) Ihrer Runtime-Hardware ab. Zu viele Threads und es wird zum Anhalten kommen (vertraue mir darauf). Zu wenige Threads und Ihre Zeiteinsparung wird möglicherweise nicht erreicht.

Ich habe die Abteilung in meiner Firma verlassen, wo ich die endgültige Lösung implementiert habe, so dass ich den Code nicht ohne weiteres zur Verfügung habe. Aber die obige Verknüpfung bietet einige grundlegende Code auf dem ExecutorService und Callable-Objekte verwenden.

Verwandte Themen