2016-04-04 15 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++; 
} 

(私はこのコードで実行時間を短縮するにはどうすればよい。問題は、長い実行時間である持っている)このコードの実行時間をどのように短縮できますか?

+0

ただの質問ですが、いつ使っているのですか? – Moshe9362

+8

DNS解決は、待ち時間によって制限され、基本的には何もありません。それを並列化する。 –

+0

ドキュメントによると、getByAddress(byte [])は逆ネームサービスのルックアップを実行しません。 – aventurin

答えて

0

私は、IPアドレスのネットワーク検索を含む同様の問題がありました。ネットワークレイテンシの問題は、「他の人が言ったように」...それはネットワークによって推進されているということです。目的地までのホップ数とホップ数。

私が見つけた唯一の解決策は、ルックアップを処理することでした(InetAddress.getByAddress(ip))。私の解決策は、10スレッドでExecutorServiceをセットアップすることでした。各InetAddress.getByAddress(ip)をCallableにパッケージ化します。完了のためにCallableを監視します。もう1つパッケージして起動してください。この非常に問題に関連し、このフォーラムで私の質問を見ることもできます:(私が見つけたとして)

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

はExecutorServiceので注意してください。スレッド数は実際にはランタイムハードウェアのCPU数(Power)に依存します。スレッドが多すぎると停止するようになります(これについて私を信頼してください)。スレッドが少なすぎると時間が短縮されないことがあります。

私は最終ソリューションを実装した私の会社に部署を去りましたので、すぐに利用できるコードはありません。しかし、上記のリンクは、ExecutorServiceとCallableオブジェクトを使用した基本的なコードを提供します。

関連する問題