总体:
我正在编写一个套接字客户端,从某个服务器端(远程服务器)一直接收“市场”数据/报价(永不停歇的循环)。
我将数据分成块,以便使用。
每个块包含约200个字符,并需要转换为数组。
在将块分割后,它被解析为列表(这里没有问题)。
问题:
运行10分钟后,CPU使用率达到40%。
我已经成功地找出了问题所在。
每个块都需要转换为json。
因此,现在给出实际执行有问题的代码。
此代码每300-400毫秒执行一次。
跳过此代码将使整个系统的CPU使用率保持在1%-2%。
注意:
我已阅读此线程,但我没有看到任何解决方案。
在循环中重用StringBuilder是否更好?
代码:
private static StringBuffer jsonVal = new StringBuffer();
public static String toJson(List<QuotesData> quotesData) {
// Empty variable
jsonVal.delete(0, jsonVal.length());
jsonVal.append("{");
synchronized (quotesData) {
for (QuotesData quote : quotesData) {
jsonVal.append("\"").append(quote.getSymbol()).append("\":[{");
jsonVal.append("\"ask\":\"").append(quote.getAsk()).append(
"\",");
jsonVal.append("\"bid\":\"").append(quote.getBid()).append(
"\",");
jsonVal.append("\"time\":\"").append(quote.getDateTime())
.append("\"}],");
}
jsonVal.append("}");
String returnString = jsonVal.toString();
return returnString.toString().replace("}],}", "}]}");
}
}