2012-05-02 7 views
2

を実行するために非常に長い時間を割い:JavaのInetAddress.getHostName()私は、次の小さなコードスニペットを持って

 InetAddress address = InetAddress.getByName(host); 
     if(address.isReachable(TIMEOUT_IN_MILLISECONDS)) { 
      System.out.println(host + " is reachable."); 
      String hostName = address.getHostName(); 
      System.out.println(hostName); 
     } 

のgethostname()メソッドは、マシンが発見された場合に実行するためにかなりの時間がかかっています。誰かが理由を説明できますか?

+0

あなたのケースで「かなりの時間がありますか? –

答えて

8

InetAddress#getHostName() javadocsから、その方法はreverse hostname lookupを実行します。したがって、そのメソッド呼び出しのパフォーマンスは、ターゲットホストのJVMとドメインネームサーバーの間のネットワーク/テクノロジスタックのパフォーマンスに依存します。

簡潔に言えば、この方法で逆引きを実行するシステムコールが行われ(例:getaddrinfo(3))、その呼び出しはオペレーティングシステムによって実装され、Name Server経由でホスト情報を収集するために必要なネットワークアクションを実行します機械。

1

一部のアドレスは解決に時間がかかります。 InetAddressには、成功した解像度と失敗した解像度を格納するキャッシュがあります。また、スレッドプールを作成します。あなたは、パフォーマンスを向上させることができ

0

toString()が速くなるようだ:

のInetAddress IAまたはInterfaceAddressのIA与え

System.out.println (ia.toString())速くあなたが、その後使用することができますia.getHostName()

よりもあなたipAddressのを含む文字列が表示されますia.toString().substringを抽出してください。

なぜわからないのですか?

関連する問題