我有一個包含 lat 和 lng 值的串列,我只是遍歷這個串列以獲取 lat 和 lng 并找到特定 Lat 和 lng 的天氣報告,但它需要大約 75 秒才能完成 100 次。我怎樣才能減少這個時間
for(LatandlngList value:latandlngList)
{
Double lat= value.getLat();
Double lng= value.getLng();
String URL="http://api.openweathermap.org/data/2.5/weather?lat=" lat "&lng=" lng
"&appid=" appId;
HttpClient weatherClient=new DefaultHttpClient();
HttpGet weatherReq=new HttpGet(url);
HttpResponse weatherresult=weatherClient.execute(weatherReq);
}
考慮回圈運行 100 次以查找天氣報告大約需要 75 秒我如何減少這個時間
uj5u.com熱心網友回復:
您可以嘗試重用連接。您的示例不應每次都需要一個新的 HTTP 客戶端。請參閱:https : //hc.apache.org/httpclient-legacy/performance.html
uj5u.com熱心網友回復:
基于代碼需要考慮的幾點 -
如果可能,創建單例
HttpClient。在您的代碼中,您HttpClient在每次迭代中都在創建——這不是一個好主意。
創建單例后,在回圈中使用它。如果順序執行不受約束,則可以使用并行執行——通過使用
Threads甚至通過使用parallelStreams()
uj5u.com熱心網友回復:
并行運行它們。您無法加快單個請求的速度,其性能取決于網路和 http 服務器回應速度。例如,這里有一篇通過 POST 練習的帖子,但它也適用于 GET。
順便提一句。您不需要為每個請求創建一個新的 HttpClient,一個就可以了。這可能會為您節省一點時間,但遠不及產生影響的水平。
抓取資料時的另一個經典問題可能是服務器節流,這可以避免,例如使用IP 輪換,但這本身就是一個完整的主題。
最后,您可以檢查緯度/經度串列中的重疊區域,以防止多個請求回傳相同的資料。使用地圖投影有些令人頭疼,但它絕對可行。我曾經使用過JTS 拓撲套件來處理這些東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/345962.html
