我的代码速度有问题。我连接到2个WiFi模块,并从status.xml获取实时数据。不幸的是,它有2-3秒的延迟。我从来没有处理过代码加速,所以这就是为什么我需要帮助。
public static void main(String[] args) {
URL temp;
URL move;
String inputLine1 = null,inputLine2 = null;
gui.setVisible(true);
BufferedReader in1 = null, in2;
try{
temp = new URL("http://192.168.0.25/status.xml");
move = new URL("http://192.168.0.26/status.xml");
while(true) {
in1 = new BufferedReader(new InputStreamReader(temp.openStream()));
in2 = new BufferedReader(new InputStreamReader(move.openStream()));
while ((inputLine1 = in1.readLine()) != null) {
if (inputLine1.contains("<adctemp>") ) {
Temperature = inputLine1;
Temperature = Temperature.replaceFirst("<adctemp>", "").replaceAll("</adctemp>", "");
}
}
while ((inputLine2 = in2.readLine()) != null) {
if(inputLine2.contains("<led2>")) {
Motion = inputLine2;
Motion = Motion.replaceFirst("<led2>", "").replaceAll("</led2>","");
if(Motion.contains("0")) {
Movement = 0;
}
else {
Movement = 1;
}
}
}
Thread.run();
}
}catch(IOException e){
e.printStackTrace();
}
}发布于 2015-06-17 19:00:49
网络速度是硬件,它将决定你能获得多大的性能。但就线程而言,您可以创建两个线程并在其中进行异步读取。目前,它是按顺序发生的。
发布于 2015-06-17 19:01:37
检查问题是代码的速度还是wifi端点的速度。
如果问题出在wifi端点上,你就不能在代码中什么都不做。
要检查您的代码,请使用从内存或文件(而不是从网络)读取数据的wifi终端部分的模拟。
如果问题仍然存在,你可以改进你的代码。在确定瓶颈是您的代码之前,不要对其进行操作。
注意:您的代码中有一个Thread.run()。你写这条线的目的是什么?
发布于 2015-06-17 19:08:34
如果来自两个流的输入不必串行运行,则可以执行的一个主要优化是并行读取两个输入流。
只需将从每个流读取输入的代码放在单独的类中,并在单独的线程中运行它,然后就可以使用join()来确保两者都完成了。
但是,由于创建和销毁线程的成本相对较高,因此更好的优化方法是保持线程运行,并通过线程同步在线程之间进行通信。由此带来的性能提升取决于到达内部while语句的次数,因此在开始时编写内部while语句还为时过早。
https://stackoverflow.com/questions/30889539
复制相似问题