2011-09-24 172 views
1

我做了一個客戶端/服務器(android/pc),似乎客戶端的網絡使用率使用了大量的CPU。就像從網絡接收4k-5k一樣,cpu上升到33毫秒。如果數據比〜32k更高,則CPU可以高於90-100毫秒。Android Socket高CPU使用率

首先,我在java版本中嘗試過客戶端(網絡部分),之後在c中,問題仍然存在。

我剖析了發送數據的服務器部分,它使用大約0毫秒。

一些細節:

  • TCP連接。
  • 客戶端連接到服務器時,客戶端發送請求,服務器發送 數據(的4-10k塊),客戶端發送請求,服務器發送...
  • 網絡部是帶螺紋的。
  • 使用(recv或recv/select)獲取數據。
  • 智能手機:Nexus one。
  • 測試分析器模式(僅網絡部分和顯示fps /毫秒)。
  • 在Wifi測試(電腦,手機,網絡都很近)。

讓我知道你是否有任何建議或疑問。

謝謝。

回答

1

您是否在Android端使用BufferedOutputStream來寫入數據?如果不是,它將逐字節地寫入,這將解釋高CPU使用率。

如果不是這種情況,請在問題中添加一些源代碼。

+0

對於讀/寫,我使用了一個字節[]緩衝區。 初始化: m_recvBuffer =新字節[RECV_BUFFER_SIZE]; Loop: socket.getInputStream()。read(m_recvBuffer,0,RECV_BUFFER_SIZE); 而RECV_BUFFER_SIZE是32768字節。 – Xunil

+0

嘗試圍繞套接字輸入流的BufferedInputStream。 – kichik

+0

@kichik爲什麼?它不會有任何區別。 – EJP