最近由于工作要求,需要对一个串口通讯设备进行压力测试,要求连续持续对串口设备发送指令,无间隔,测试设备是否会死机。

要求做到毫秒级,测试第三方的工具,基本上都无法达到毫秒级,最少的也是10毫秒。

于是就自己写代码测试。通过.net写,发现最少能达到1毫秒,但是有遗漏,看日志如下

2024-03-31 22:11:02 164 00 00
2024-03-31 22:11:02 165 00 00
2024-03-31 22:11:02 166 00 00
2024-03-31 22:11:02 167 00 00
2024-03-31 22:11:02 169 00 00
2024-03-31 22:11:02 170 00 00
2024-03-31 22:11:02 171 00 00
2024-03-31 22:11:02 172 00 00
2024-03-31 22:11:02 173 00 00
2024-03-31 22:11:02 175 00 00
2024-03-31 22:11:02 176 00 00
2024-03-31 22:11:02 178 00 00
2024-03-31 22:11:02 179 00 00
2024-03-31 22:11:02 181 00 00
2024-03-31 22:11:02 183 00 00
2024-03-31 22:11:02 184 00 00
2024-03-31 22:11:02 186 00 00
2024-03-31 22:11:02 188 00 00
2024-03-31 22:11:02 190 00 00
2024-03-31 22:11:02 191 00 00
2024-03-31 22:11:02 192 00 00
2024-03-31 22:11:02 194 00 00
2024-03-31 22:11:02 196 00 00
2024-03-31 22:11:02 198 00 00
2024-03-31 22:11:02 199 00 00
2024-03-31 22:11:02 201 00 00

时间后的三位数字是毫秒,发现偶尔会少一个毫秒。

用java写了一段测试,效果如下

2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401190]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401191]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401192]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401193]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401194]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401195]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401196]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401197]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401198]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401199]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401200]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401201]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401202]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401203]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401204]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401205]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401206]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401207]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401208]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401209]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401210]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401211]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401212]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.225 [main] DEBUG com.bonn.Test2 - [401213]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401214]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401215]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401216]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401217]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401218]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401219]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401220]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401221]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401222]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401223]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401224]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401225]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401226]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401227]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401228]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401229]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401230]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401231]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401232]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401233]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401234]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401235]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401236]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401237]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401238]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401239]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401240]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401241]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401242]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401243]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401244]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401245]---> 发送:FC FC FC 0A 00 02 20 00 28 2E
2024-03-31 22:05:20.226 [main] DEBUG com.bonn.Test2 - [401246]---> 发送:FC FC FC 0A 00 02 20 00 28 2E

会发现同一毫秒发了好多条。

我用了十多年的.net的,今年才开始用java,这差距就这么大吗?

.net部分源码

        static void Main(string[] args)
{
SerialPortHelper sp = new SerialPortHelper();
sp.Open();
for (int i = 0; i < 1000; i++)
{
byte[] bs = new byte[2];
sp.Send(bs);
Trace.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss fff} {bs.ByteToHexString()}");
}
}
            while (true) {
i++;
if (i > totalTimes) {
break;
}
synchronized (lock) {
try {
long curCommMillis = System.currentTimeMillis();
String[] strList = new String[2];
strList[1] = "FC FC FC 0A 00 02 20 00 28 2E"; byte[] sendBuff = ByteHelper.hex2byte(strList[1]); // Send(sendBuff);
sp.writeBytes(sendBuff, sendBuff.length);
logger.debug(String.format("[%s]---> 发送:%s ", i, byteToString(sendBuff))); } catch (Exception ex) {
logger.error("main exception 01:", ex);
}
}
}

关键代码已经发出来了,其他无关的不影响主没有发。

大家可以讨论一下,是我使用的方法不对吗,请指正。

.net和java串口通讯压力测试对比的更多相关文章

  1. 简单的Java串口通讯应答示例

    java串口通讯第一次使用,找的资料都比较麻烦,一时没有理出头绪,自己在示例的基础上整理了一个简单的应答示例,比较简陋,但演示了java串口通讯的基本过程. package com.garfield. ...

  2. ASP.NET 页面缓存OutputCache用法实例(附ab压力测试对比图)

    本文主要介绍Web窗体页面中的使用方法,MVC中使用方法,大家自行百度. 一.简单一行指令即可实现 <%@ OutputCache VaryByParam=" %> 这样整个页面 ...

  3. MongoDB3.2版本与3.0版本写场景压力测试对比

    我们主要是为了测试journal对写操作性能的影响.分别测试了3.2版本,3.0版本在ramdisk,hdd上有journal,和没journal的情况. 发现一个很怪异的现象,3.2版本时候,随着y ...

  4. java串口通讯环境配置

    用java实现串口通信(windows系统下),配置如下: 1.comm.jar放置到 JAVA_HOME/jre/lib/ext;2.win32com.dll放置到 JAVA_HOME/bin;3. ...

  5. java web下串口通讯

       最近在做java串口通讯,主要是用个人电脑通过串口从RS485读取数据,并通过crc循环冗余校验,把接收正确的数据解析,插入数据库mysql,并用SSH技术把数据库数据以表格以及图表形式显示   ...

  6. Java利用Rxtx进行串口通讯

    最近在做传感器数据采集的工作,底层是基于Zigbee的无线传感网络,所有数据采集到Zigbee协调器上然后通知上位机数据采集完成,上位机通过USB转串口去读取数据就可以了.那么问题来了,如何进行串口通 ...

  7. 使用 JMeter 完成常用的压力测试 [转]

    讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测试.但是软件仅仅只是功能正确是不够的.在实际开发中,还有其它的非功能因素也起着决定性的因素,例如软件的响应速度.影响软件响应速度的 ...

  8. 使用 JMeter 完成常用的压力测试

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. 【转】使用 JMeter 完成常用的压力测试

    本文介绍了 JMeter 相关的基本概念.并以 JMeter 为例,介绍了使用它来完成最常用的三种类型服务器,即 Web 服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项.      ...

  10. 【转】使用JMeter 完成常用的压力测试(三)

    使用JMeter 完成常用的压力测试 发布时间: 2008-9-27 15:33    作者: 未知    来源: 网络转载 字体:  小  中  大  | 上一篇 下一篇 | 打印  | 我要投稿 ...

随机推荐

  1. 《系列一》-- 2、XmlBeanFactory 的类图介绍.md

    阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证.全系列文章基于 spring 源码 5.x 版本. Spring源码阅读系列--全局目录.md ...

  2. python3调用nmap封装

    python3调用nmap封装; 外部处理好参数后直接调用; #!/usr/bin/env python # -*- coding: utf-8 -*- """ 代码修改 ...

  3. gitee配置SSH公钥

    第一步,找个地方打开"git bash",然后输入生成ssh公钥的命令: ssh-keygen -t rsa -C 'your-email' 然后敲四次回车生成公钥: 第二步,输入 ...

  4. flutter——android报错Manifest merger failed : Attribute application@allowBackup value=(false)

    与这个https://www.cnblogs.com/MaiJiangDou/p/13848658.html 报错类似. 报错: Manifest merger failed : Attribute ...

  5. gunzip命令

    解压提取文件内容 语法格式:gunzip 参数 压缩包 常用参数 -a 使用ASCII文本模式 -q 静默执行模式 -c 将解压后的文件输出到标准输出设备 -r 递归处理所有子文件 -f 强制解压文件 ...

  6. 【转载】重装系统小贴士:ssh、vscode免密登录

    ssh安装 apt install openssh-server 然后到cd /etc/ssh下找sshd_config文件,打开把允许远程root登录的选项改为yes 重启ssh服务:/etc/in ...

  7. 【Azure API 管理】讨论APIM是否适合直接存储文件到Azure Storage Account呢?

    问题描述 需要从 APIM 直接将大文件存入Azure Storage,没看到这方面的官方文档,所以是否有这方面的实践案例,或者APIM是否支持引用SDK (如Azure Storage SDK)? ...

  8. Java -----多线程 创建线程的方式三: 实现Callable接口----JDK 5.0 新增

    1 package bytezero.thread2; 2 3 import java.util.concurrent.Callable; 4 import java.util.concurrent. ...

  9. 前端css阴影画图

    在线演示地址:css阴影画图 一,在css中有一个box-shadow属性,可以设置元素的阴影. .item{ width: 50px; height: 50px; background: #0096 ...

  10. confluence 破解系列

    confluence 破解系列 目录 confluence 破解系列 前言 confluence 一. 安装数据库mysql 二 docker启动confluence 前言 confluence Co ...