(原创)[开源][.Net Standard 2.0] SimpleMMF (进程间通信框架)更新 v1.1,极低CPU占用
一、前言
在上一篇 (原创)[.Net] 进程间通信框架(基于共享内存)——SimpleMMF 中,发布了v1.0版,最大的问题是:CPU占用较高,至少40-50%。
这既与我的开发水平有关,也与SimpleMMF诞生环境有关,这个主要是用在数字孪生各软件之间同步数据,而部署软件的工作站性能都强悍,像我常用的便是一个有着192GB内存的工作站,CPU的具体型号忘了。
再加上相关的软件一个比一个吃资源,所以也不差SimpleMMF这一个。
但是,毕竟不完善,这几年间也时间有人发邮件说此问题,同时也反馈.net 4.8的版本也较低,也有人发了提升了.net版本及优化的工程,既然SimpleMMF不止我用,还在发挥作用,趁近期得空,好好的优化一版。
相信看完的你,一定会有所收获!
本文地址:https://www.cnblogs.com/lesliexin/p/18676994
二、开源地址
SimpleMMF 是开源的,开源地址如下:
GitHub:
https://github.com/lesliexinxin/LeslieXin.SimpleMMF
Gitee:
https://gitee.com/lesliexin/lesliexin.simplemmf
同时v1.1也上传到了NuGet上,地址如下:
https://www.nuget.org/packages/LeslieXin.SimpleMMF
三、优化内容
本节是本文的核心,优化主要分两部分:
1,.Net框架版本低的问题。
2,CPU占用高的问题。
我们下面分别来看。
1,.Net框架版本低的问题
V1.0的版本是基于 .Net 4.5 开发的,为了兼容更广,特别是支持.Net Core、.Net6\7\8\9,必然要做调整。
经过对比选型,决定使用 .Net Standard 2.0 进行开发,因为它支持的范围更广,如图所示:

如此一来,本问题也就解决了。
2,CPU占用高的问题
这个问题的根源,在于代码中使用轮询的方式,去监测共享内存状态,这样便会导致空转过快,进而导致CPU占用提升。
而优化方法,便是使用 命名事件 ,MSDN上的解释如下:
(https://learn.microsoft.com/zh-cn/dotnet/standard/threading/eventwaithandle)

因为有命名事件的参与,所以就不需要3个共享内存块了,只需要一个用来存储数据即可。
四、效果显示
演示Demo已开源:
GitHub:
https://github.com/lesliexinxin/Demo_SimpleMMF
Gitee:
https://gitee.com/lesliexin/demo-simplemmf
请看下面的录屏,主要便是看CPU的占用与变化。
五、结语
技术没有新旧之分同,只有合不合适之分。
感谢的大家的观看与学习,如有错误欢迎批评指正。
(原创)[开源][.Net Standard 2.0] SimpleMMF (进程间通信框架)更新 v1.1,极低CPU占用的更多相关文章
- 开源一个基于dotnet standard的轻量级的ORM框架-Light.Data
还在dotnet framework 2.0的时代,当时还没有EF,而NHibernate之类的又太复杂,并且自己也有一些特殊需求,如查询结果直接入表.水平分表和新增数据默认值等,就试着折腾个轻量点O ...
- 原创开源项目HierarchyViewer for iOS 2.1 Beta新功能介绍
回顾 HierarchyViewer for iOS是我们发布的一个开源项目,采用GPL v3.0协议. HierarchyViewer for iOS可以帮助iOS应用的开发和测试人员,在没有源代码 ...
- .NET Core 2.0及.NET Standard 2.0
.NET Core 2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布. .NET Core 2.0正式版本发布时间大约在Q ...
- 微软Build 2017第二天 .NET Standard 2.0 Preview 的客户端跨平台
微软公司一年一度的开发者大会,即“Microsoft Build 2017”在总部西雅图正式开幕.按照官方安排,本次大会将持续 3 天,主题围绕微软公司各项最新技术成果的展示和研讨,包括与微软相关的产 ...
- .NET Standard 2.0 特性介绍和使用指南
.NET Standard 2.0 发布日期:2017年8月14日 公告原文地址 前言 早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据个人经验,微软的产品一般在2.0时 ...
- [C#] .NET Core/Standard 2.0 编译时报“CS0579: Duplicate 'AssemblyFileVersionAttribute' attribute”错误的解决办法
作者: zyl910 一.缘由 当创建 .NET Core/Standard 2.0项目时,VS不会像.NET Framework项目一样自动生成AssemblyInfo.cs文件. 而且,若是手工在 ...
- 【原创开源】网络版二代双通道示波器开源发布,支持电脑,手机和Pad等各种OS平台访问
前言感谢大家的支持,提前奉上今年的国庆福利. 一代示波器发布于3年前,去年年底的时候发布了二代示波器,软件性能已经比较强劲,但依然有值得升级改进的地方,经过今年这半年多努力,在二代示波器的基础上再推出 ...
- .NET Standard 2.0正式发布了
亦可赛艇 前天(2017年8月14日),.NET Standard 2.0正式版终于发布了,与之相配套的.NET Core 2.0也同时正式发布,真是令人振奋. 详情请看:https://blogs. ...
- .NET Core 2.0及.NET Standard 2.0 Description
NET Core 2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布. .NET Core 2.0正式版本发布时间大约在Q3 ...
- 安装.Net Standard 2.0, Impressive
此版本的.NET Standard现在支持大约33K的API,与.NET Standard 1.x支持的14K API相比.好的是大部分API来自.NET Framework.这使得生活更容易将代码移 ...
随机推荐
- java.lang.NoSuchMethodError: org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(Ljava/io/File;Z) 报错处理
字面看下:没有该方法,首先应该推测有可能是Jar冲突导致的,因为一些jar中的类在升级的过程中不会向下兼容,所以有一些高级属性或方法就jar中没有,此POI就是. 可以先看下这个类的资源加载路径: C ...
- vue中获取v-for循环出来的元素的相对于父级的最左边的距离
- 项目监控之sentry
github: https://github.com/getsentry/sentry 1.什么是sentry? 当我们完成一个业务系统的上线时,总是要观察线上的运行情况,对于每一个项目,我们都没办法 ...
- Docker镜像管理之Harbor
github: https://github.com/goharbor/harbor 官网:https://goharbor.io/docs/2.5.0/ [安装] 1. 查看是否达到安装条件 2.根 ...
- django性能分析工具之silk
在开发过程中,有很多时候需要了解程序性能瓶颈,比如程序执行时间.网络耗时.数据库连接时间等:那接下来,django silk就派上用场了! 安装 https://github.com/jazzband ...
- manim边做边学--圆柱体
Cylinder是Manim中用于创建圆柱体对象的类. Cylinder类在制作数学.物理或工程领域的动画时,可用于以下的场景中: 演示几何概念:使用Cylinder类创建圆柱体,并通过改变其参数和方 ...
- 使用阿里的ARTHAS跟踪方法耗时
使用命令跟踪一个方法的耗时 在arthas 命令行下输入命令 trace 类全路径 监控的方法 trace com.redxun.bpm.core.service.BpmInstServiceImpl ...
- uni-app项目分包后子包中静态资源丢失
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app. 坑位 随着项目越做越 ...
- Linux安装JDK,解压报错:gzip: stdin: not in gzip format
问题描述 在Linux安装JDK tar -zxvf 命令解压时,报错,无法解压 报错内容: gzip: stdin: not in gzip format tar: Child returned s ...
- Qt编写安防视频监控系统62-子模块6预置位
一.前言 预置位功能,只对带有预置位的球机才起作用,有云台的球机未必有预置位,要仔细查看清楚,不清楚可以询问厂家或者查阅手册,在本模块中,可以获取预置位.添加预置位.调用预置位.删除预置位.调用起始位 ...