底层开发
文章平均质量分 72
ironinfo
这个作者很懒,什么都没留下…
展开
-
Dotnetty ClosedChannelException I/O error occurred 异常原因
症状 折磨了我一整天,在单独的console application下好好的,集成到一块就在 bootstrap.BindAsync()处抛出ClosedChannelException “I/O error occurred" 异常,也没有其他有价值的信息了。集成环境与console app的区别有3处:集成环境是在asp.net core3.1中; 集成环境是通过反射加载的; 集成环境中,还有一个地方用到了Dotnetty。分析是不是 asp.net core 不支持udp ...原创 2021-07-30 13:56:11 · 1041 阅读 · 0 评论 -
Dotnetty Mqtt Azure 网关服务端的实现步骤
Dotnetty项目提供了mqtt的编码和解码,但没有提供mqtt客户端和服务端的例子,Azure的另一个项目 azure-iot-protocol-gateway 是基于 dotnetty 实现的 mqtt 网关,该项目用途是设备通过 mqtt 与 网关通讯,网关再通过AMQP协议与 Azure IoT Hub 通讯,从而实现了设备与hub的桥接。本文通过翻译文档的部分内容,来说明 mqtt server 的主要逻辑。一、启动服务端 return new Serve...翻译 2021-02-18 16:39:53 · 630 阅读 · 0 评论 -
ebyte Lora 转 4G 透传通讯测试
目标 通过Lora模块将数据发送到云上的服务器。测试工具Lora 模块,我用的是 ebyte E22-400T22D; Lora 天线,我用的是 ebyte TX433-JKD-20P; Lora-4g数传电台,我用的是 ebyte E90-DTU(400SL22-4G),外加 4G天线,Lora天线,电源线 和USB线; 1张有流量的SIM卡,大卡,我是用手机的迷你卡在外面做了个套对付用了; usb-TTL转接线,我用的是CH340G 模块,WIN10系统自动安装驱动; L...原创 2020-11-07 12:16:24 · 2690 阅读 · 0 评论 -
C# 从外部取消任务的执行
根据微软官方文档,推荐用TAP模式编写异步程序,提供了用于取消Task的 CancellationToken 标记,实际应用中可以new 一个CancellationTokenSource对象。当我们需要一个循环执行的机制时(在Thread方式下通常是用Thread.Sleep,在Task下就是await Task.Delay),需要停下来时,由于线程或Task从外部都是无法停止的,要在内部通过这个 CancellationToken 来自行停下来,那么就有两个选择:每次循环开始时,使用 c...原创 2020-09-15 09:55:53 · 577 阅读 · 0 评论 -
.net framework 下使用.net core 的高性能类库如 Span<T>, ValueTuple
.net core2.1以后的性能大幅提升,离不开底层的Span<T>这种类指针操作,以及ValueTuple降低堆与堆栈之间的装箱拆箱开销,在.net framework下默认没有这些好东西。 由于历史上一直用.net framework的.net remoting做进程间通讯,而.net remoting不被.net core支持,导致在.net core下写的东西无法直接与.net framework做的服务通过.net remoting集成到一起,因此找到一个折衷方案:...原创 2020-08-08 09:53:31 · 965 阅读 · 0 评论 -
C#将各种数据写入字节数组的快速方法
最近在优化实时数据库(参考influxdb写的)存储性能时,遇到了要将bool, int, long, double, string 序列化为字节数组(mashal),然后再Snappy压缩的部分,通过visual studio 2017中的性能探查器,发现mashal CPU占比2.23%,有优化潜力,于是做了如下尝试: 原方案: List<byte> + Bit...原创 2019-08-19 15:34:56 · 3428 阅读 · 0 评论 -
.net 异步更慢了
做实时数据库内核时,花了两天时间把之前同步逻辑改成异步,重点涉及到IO处理的方法,本以为性能会提升,因为微软官方文档专门就io异步方式和算法异步进行了说明。今天测试结果大跌眼镜,压缩写入文件的速度从10m/s下降到了3m/s,.net core3.0本身占用了93.48%CPU时间,其中仅异步调度就占用了20.35%,而我的业务逻辑只得到了可怜的6.52%,比同步模式下的21.8%降低了7...原创 2019-08-27 16:20:44 · 252 阅读 · 0 评论 -
C# 按位类型转换
在go语言中,自带Float64bits,源代码func Float64bits(f float64) uint64 { return *(*uint64)(unsafe.Pointer(&f)) }实质上是把8个字节的float64改成uint64类型,有别于C#中的Convert.ToUint64(double),后者是进行的值转换,例如:Convert.ToUint64(...原创 2019-09-03 14:05:20 · 347 阅读 · 0 评论