我正在用Eclipse用Java编写一个小应用程序,以便像使用鼠标一样使用我的Leap Motion设备。当从Eclipse运行时,一切都在工作,速度快,响应迅速,而不是冻结,崩溃或其他。
我将Java应用程序导出到一个Runnable,我运行它JAR
javaw -jar LeapMotionController.jar
一切都很慢,在XML中读取和写入配置,建立与本地Web套接字服务的连接。
该应用程序有3个类,
飞跃运动
系统托盘
和设置
LeapMotion 类是主应用程序,从此我启动 Systray 类,并在启动用于初始化连接的 run 命令后。
SysTray.chgIcon("warn");
container = ContainerProvider.getWebSocketContainer();
container.setDefaultMaxBinaryMessageBufferSize(1024);
container.setDefaultMaxTextMessageBufferSize(1024);
session=container.connectToServer(LeapMotion.class, URI.create("ws://localhost:6437/v7.json"));
session.setMaxBinaryMessageBufferSize(1024);
session.setMaxTextMessageBufferSize(1024);
wait4TerminateSignal();
wait4TerminateSignal 是,
private static void wait4TerminateSignal() {
synchronized(waitLock) {
try {
for (;;) {
waitLock.wait();
if(session==null) {
waitLock.notify();
break;
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在读取安装变量的 XML 文件后 1 秒后显示系统。文档加载在变量中以供重用(限制直接文件的读取)。5-10秒后,我收到websocket的第一个答案,握手,其中包含有关设备版本的信息。
之后,所有消息都排队并做一个大缓冲区,我试了两个值(10和1024),一次是帮忙,之后是走得非常非常慢。
在任务管理器中,我使用120MB的内存(32GB),cpu永远不会超过1.5%(我有8个内核,16个线程在3.2GHz)。javaw 进程使用 50-60 个线程。
我还为掉落活动添加了限制。使用增量,当达到该值时,处理消息,并将增量重置为 0。
你需要了解Leap Motion Web Socket;- 平均每秒110条消息,我无法控制数量 - 不需要发送消息即可获得回复 - 仅以JSon格式输出
我已经测试和搜索了;- 如何优化Java(找不到真正的帮助) - 使用WebSocket的另一种方式,其他需要消息来获取回复(聊天) - 使用电梯.exe(谷歌它)使Java在管理员中正确,不进行更改 - 手动增加进程优先级(小上面,和实时),它不做任何更改 - 没有找到有关缓冲区的信息, 并且代码是在 https://dzone.com/articles/sample-java-web-socket-client 上找到的代码(代码的第二部分)
如果我错过了信息或想要更多详细信息,请给我留言。
我希望提高性能。使用设备接收的消息和数据量,我可以支持队列丢弃或类似的解决方案。
守着星空守着你
相关分类