当前位置: 首页 > news >正文

用于管理共享内存的 C# 类 ShareMemory

可以在 Windows 和 Linux 上运行,利用了 .NET Core 的 System.IO.MemoryMappedFiles 库。这个类实现了共享内存的创建、打开、读取和写入功能。以下是对代码的一些分析和建议改进。

代码分析

  1. 初始化与打开共享内存:

    • Init 方法用于创建新的共享内存段。
    • OpenMem 方法用于打开已存在的共享内存段。
    • 这两个方法都处理了异常并返回状态码,非常适合用于错误处理。
  2. 关闭共享内存:

    • Close 方法确保释放资源,避免内存泄漏。
  3. 读写数据:

    • Read 和 Write 方法提供了数据读写的功能,支持指定偏移量和大小。
  4. 状态管理:

    • _isInitialized 和 _isOpened 标志用于跟踪共享内存的状态。
using System;
using System.IO.MemoryMappedFiles;
using System.Runtime.InteropServices;namespace MemoryDB
{class Class_ShareMemory{private MemoryMappedFile _memoryMappedFile;private MemoryMappedViewAccessor _viewAccessor;private long _memSize;private string _name;private bool _isInitialized;private bool _isOpened;public Class_ShareMem(){_isInitialized = false;_isOpened = false;}/// <summary>/// 初始化共享内存/// </summary>/// <param name="name">共享内存名称</param>/// <param name="size">共享内存大小</param>/// <returns></returns>public int Init(string name, long size){if (size <= 0) size = 0x00800000; // Default size_memSize = size;_name = name;try{// 根据操作系统设置共享内存名称string fullName = GetFullMemoryMappedFileName(_name);_memoryMappedFile = MemoryMappedFile.CreateNew(fullName, _memSize);_viewAccessor = _memoryMappedFile.CreateViewAccessor();_isInitialized = true;}catch (Exception ex){Console.WriteLine($"创建共享内存失败: {ex.Message}");return 2; // 创建失败}return 0; // 创建成功}/// <summary>/// 打开共享内存/// </summary>public int OpenMem(string name, long size){if (size <= 0) size = 0x00800000; // Default size_memSize = size;_name = name;try{// 根据操作系统设置共享内存名称string fullName = GetFullMemoryMappedFileName(_name);_memoryMappedFile = MemoryMappedFile.OpenExisting(fullName);_viewAccessor = _memoryMappedFile.CreateViewAccessor();_isOpened = true;}catch (Exception ex){Console.WriteLine($"打开共享内存失败: {ex.Message}");return 1; // 打开失败}return 0; // 打开成功}/// <summary>/// 关闭共享内存/// </summary>public void Close(){_viewAccessor?.Dispose();_memoryMappedFile?.Dispose();_isInitialized = false;_isOpened = false;}/// <summary>/// 读数据/// </summary>/// <param name="data">数据</param>/// <param name="offset">起始地址</param>/// <param name="size">个数</param>/// <returns></returns>public int Read(ref byte[] data, long offset, int size){if (offset + size > _memSize) return 2; // 超出数据区if (_isInitialized || _isOpened){_viewAccessor.ReadArray(offset, data, 0, size);}else{return 1; // 共享内存未初始化}return 0; // 读成功}/// <summary>/// 写数据/// </summary>/// <param name="data">数据</param>/// <param name="offset">起始地址</param>/// <param name="size">个数</param>/// <returns></returns>public int Write(byte[] data, long offset, int size){if (offset + size > _memSize) return 2; // 超出数据区if (_isInitialized || _isOpened){_viewAccessor.WriteArray(offset, data, 0, size);}else{return 1; // 共享内存未初始化}return 0; // 写成功}/// <summary>/// 根据操作系统获取完整的共享内存名称/// </summary>/// <param name="name">共享内存名称</param>/// <returns>完整的共享内存名称</returns>private string GetFullMemoryMappedFileName(string name){// 在 Windows 中使用 Global 前缀,在 Linux 中不使用if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)){return $"Global\\{name}";}else{return name; // Linux 上直接使用名称}}}
}

相关文章:

用于管理共享内存的 C# 类 ShareMemory

可以在 Windows 和 Linux 上运行&#xff0c;利用了 .NET Core 的 System.IO.MemoryMappedFiles 库。这个类实现了共享内存的创建、打开、读取和写入功能。以下是对代码的一些分析和建议改进。 代码分析 初始化与打开共享内存: Init 方法用于创建新的共享内存段。OpenMem 方法…...

arcgispro双击打开没反应怎么办

不知道什么原因&#xff0c;突然就打不开了&#xff0c;网上关于arcgispro的教程和求助帖还比较少&#xff0c;参考了几个博主的分享&#xff0c;还是没解决 Arcpro——arcpro启动无反应_arcgispro正在初始化后没反应-CSDN博客 Arcgis Pro安装完成后启动失败的解决办法_arcgi…...

常见高速电路设计与信号完整性核心概念

一、传输线理论&#xff08;Transmission Line Theory&#xff09; 基本定义 当信号频率或边沿速率足够高时&#xff0c;互连线的长度与信号波长可比拟&#xff08;通常为信号上升时间的1/6以上&#xff09;&#xff0c;此时需将互连视为传输线&#xff0c;而非理想导线。 临界…...

青少年编程与数学 02-019 Rust 编程基础 20课题、面向对象

青少年编程与数学 02-019 Rust 编程基础 20课题、面向对象 一、面向对象的编程特性&#xff08;一&#xff09;封装&#xff08;Encapsulation&#xff09;&#xff08;二&#xff09;多态&#xff08;Polymorphism&#xff09;&#xff08;三&#xff09;继承&#xff08;Inhe…...

<uniapp><vuex><状态管理>在uniapp中,如何使用vuex实现数据共享与传递?

前言 本专栏是基于uniapp实现手机端各种小功能的程序&#xff0c;并且基于各种通讯协议如http、websocekt等&#xff0c;实现手机端作为客户端&#xff08;或者是手持机、PDA等&#xff09;&#xff0c;与服务端进行数据通讯的实例开发。 发文平台 CSDN 环境配置 系统&…...

如何使用通义灵码辅助开发鸿蒙OS - AI编程助手提升效率

一、引言 鸿蒙 OS 是华为推出的一款面向全场景的分布式操作系统&#xff0c;其开发应用主要使用华为基于 IntelliJ IDEA 定制的 DevEco Studio。然而&#xff0c;DevEco Studio 的插件生态相对有限&#xff0c;为了提升开发效率和代码质量&#xff0c;我们可以借助通义灵码这一…...

解决git中断显示中文为八进制编码问题

git config --global core.quotepath false 命令用于配置 Git 如何处理非 ASCII 字符&#xff08;如中文、日文、韩文等&#xff09;的文件名显示 core.quotepath Git 的一个核心配置项&#xff0c;控制是否对非 ASCII 文件名进行转义&#xff08;quote&#xff09;处理。 f…...

宿州金博学校开展防震演练:夯实安全根基,守护校园平安

5月13日上午9点30分&#xff0c;金博学校原本宁静的校园被一阵急促的警报声打破&#xff0c;一场精心筹备、紧张有序的防震演练正式开启。本次演练意义重大&#xff0c;旨在强化全体师生的防震减灾意识&#xff0c;提高大家在地震突发时的应急反应与自我保护能力。 紧急避险&am…...

【鸿蒙开发】安全

应用隐私保护最佳实践 使用隐私声明获取用户同意 初次访问使用隐私声明弹窗&#xff0c;只有用户同意后才能开始正常使用。 减少应用的位置访问权限 使用模糊定位获取位置信息 位置权限申请方式 target API level申请位置权限申请结果位置的精确度小于9ohos.permission.L…...

企业级网络安全护盾:剖析高防IP原理与防护策略

在当今数字化时代&#xff0c;网络安全已成为企业不可忽视的关键课题。高防IP作为网络安全防护的重要手段之一&#xff0c;正因其出色的防御能力和应用灵活性受到广泛关注。本文将深入解析高防IP的原理&#xff0c;包括流量清洗、防御策略、节点分布等技术要点&#xff0c;并通…...

智能事件分析边缘服务器:交通管理与安全监测的利器

在当今交通管理和安全监测的领域中&#xff0c;智能化、高效化的设备需求日益增长。智能事件分析边缘服务器凭借其卓越的性能和丰富的功能&#xff0c;成为了该领域的佼佼者。 一、产品概述 智能事件分析边缘服务器是一款采用嵌入式 Linux 操作系统的边缘事件分析终端。它具有…...

Gin--Blog项目-flags文件解析

flags/enter.go文件解析 package flagsimport ("flag""os" )type Options struct {File stringDB boolVersion bool }var FlagOptions new(Options)func Parse() {flag.StringVar(&FlagOptions.File, "f", "settings.yaml&qu…...

JVM的面试相关问题

面试中的相关问题主要是三块 1.JVM 内存区域划分 2.JVM 的类加载机制 3.JVM 的垃圾回收机制 JVM Java虚拟机 VM Virtual Machine 虚拟机,用 软件 来 模拟 硬件 传统意义上的"虚拟机" 更多指的是 VMWare, Virtual Box, Hyper-V, KVM(构造出虚拟的电脑,甚至可以…...

Linux(3)——基础开发工具

一、软件包管理器——yum 1.Linux下安装程序的方式 在Linux环境下安装软件的方式有以下几个方式&#xff1a; 1&#xff09;源码安装&#xff0c;直接下载源代码&#xff0c;让它自行编译运行形成可执行程序。 2&#xff09;软件包安装&#xff0c;下载rpm安装包&#xff0…...

HarmonyOS5云服务技术分享--ArkTS调用函数

✨【HarmonyOS实战指南】手把手教你用ArkTS玩转云函数文件获取✨ 大家好呀今天我们来聊聊如何通过HarmonyOS的ArkTS语言实现云函数文件获取功能。整个过程就像搭积木一样有趣&#xff0c;保证小白也能轻松上手&#xff01;&#xff08;文末有完整代码模板哦&#xff09; &…...

2025年AI搜索引擎发展洞察:技术革新与市场变革

引言&#xff1a;AI搜索的崛起与市场格局重塑 2024-2025年&#xff0c;AI搜索市场迎来了前所未有的变革期。随着DeepSeek-R1等先进大语言模型的推出&#xff0c;传统搜索引擎、AI原生搜索平台以及各类内容平台纷纷加速智能化转型&#xff0c;推动搜索技术从基础信息检索向深度…...

基于开源链动2+1模式AI智能名片S2B2C商城小程序的社群构建与新型消费迎合策略研究

摘要&#xff1a;随着个性化与小众化消费的崛起&#xff0c;消费者消费心理和模式发生巨大变化&#xff0c;社群构建对商家迎合新型消费特点、融入市场经济发展至关重要。开源链动21模式AI智能名片S2B2C商城小程序的出现&#xff0c;为社群构建提供了创新工具。本文探讨该小程序…...

leetcode 旋转数组 java

本来想用栈或者队列来解决&#xff0c;发现一直报k>nums.length的错。 将原数组下标为 i 的元素放至新数组下标为 (ik)modn 的位置&#xff0c;最后将新数组拷贝至原数组即可。 class Solution {public void rotate(int[] nums, int k) {// Stack<Integer> stack n…...

Ansible模块——通过 URL 下载文件

通过 URL 下载文件 ansible.builtin.get_url 可以通过 URL 下载文件。 选项名 类型 默认值 描述 attributesstrnull 设置文件系统对象的属性&#xff0c;格式参考 lsattr&#xff1b;支持 , -, 操作符。别名&#xff1a;attr。 backupboolfalse 创建目标文件的备份副本&am…...

2025年高考考务人员培训监考员学习项目试题

考务人员培训系统 学员端&#xff08;高考&#xff09; 第1部分&#xff1a;单选题 1. 对违背考试公平、公正原则&#xff0c;在考试中存在违规行为的考生&#xff0c;采用何种处理办法&#xff1f;&#xff08;A &#xff09; [2分] A. 根据《国家教育考试违规处理办法》等…...

谈谈jvm的调优思路

目录 1、G1回收器 2、常用的回收器分类 1、cms 2、G1、Hotspot 3、ZGC 4、设置 3、常见的调优策略 3.1、设定大小 1、堆的大小 2、Region的大小 3、年轻代大小调整 3.2、设置最大停顿时间 3.3、设置标记和回收线程 3.4、并发周期触发阈值 背景 正常情况下&#x…...

通过自签名ssl证书进行js注入的技术,适合注入electron开发的app

由于很多软件都是electron或者pyqt做的安装包,没法像浏览器那样可以直接通过浏览器插件注入js,或者很多网站都有csp限制,无法直接注入js,这种使用自签名代理的方式,完美绕过了所有限制,直接将js注入到外链js中。 步骤:1,局域网准备两台电脑,一个windows,一台Linux,…...

异步复位,同步释放

参考链接&#xff1a;数字电路复位信号设计&#xff08;异步复位、同步释放&#xff09;笔记详解_异步复位同步释放的高有效原理-CSDN博客 一、异步复位&#xff08;Asynchronous Reset&#xff09; 含义&#xff1a;当复位信号 reset 为低&#xff08;或高&#xff0c;视具体…...

Vortex GPGPU的github流程跑通与功能模块波形探索(三)

文章目录 前言一、./build/ci下的文件结构二、基于驱动进行仿真过程牵扯的文件2.1 blackbox.sh文件2.2 demo文件2.3 额外牵扯到的ramulator2.3.1 ramulator简单介绍2.3.2 ramulator使用方法2.3.3 ramulator的输出2.3.4 ramulator的复现2.3.4.1 调试与验证&#xff08;第 4.1 节…...

Ubuntu 安装 Node.js 指定版本指南

Ubuntu 安装 Node.js 指定版本指南&#xff08;适用于生产与开发环境&#xff09; 在没有安装 NVM 的服务器环境中&#xff08;如 Docker、CI/CD、虚拟机等&#xff09;&#xff0c;建议使用 Node.js 官方的二进制包源&#xff08;PPA&#xff09;来快速安装特定版本的 Node.j…...

使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程

使用 Java 开发 Android 应用&#xff1a;Kotlin 与 Java 的混合编程 在开发 Android 应用程序时&#xff0c;我们通常可以选择使用 Java 或 Kotlin 作为主要的编程语言。然而&#xff0c;有些开发者可能会想要在同一个项目中同时使用这两种语言&#xff0c;这就是所谓的混合编…...

安防监控网络摄像机画面异常问题与视频监控管理平台EasyCVR应用

一、方案背景 在安防监控领域&#xff0c;画面卡顿、时有时无等问题犹如隐藏的潜在风险点&#xff0c;不仅严重干扰监控系统的正常运行&#xff0c;更可能在安全防护的关键时刻出现故障&#xff0c;让潜在的风险与隐患有机可乘。想要彻底攻克这些顽疾&#xff0c;就需要我们抽…...

MATLAB中进行语音信号分析

在MATLAB中进行语音信号分析是一个涉及多个步骤的过程&#xff0c;包括时域和频域分析、加窗、降噪滤波、端点检测以及特征提取等。 1. 加载和预览语音信号 首先&#xff0c;你需要加载一个语音信号文件。MATLAB支持多种音频文件格式&#xff0c;如.wav。 [y, fs] audiorea…...

Kotlin 协程 (三)

协程通信是协程之间进行数据交换和同步的关键机制。Kotlin 协程提供了多种通信方式&#xff0c;使得协程能够高效、安全地进行交互。以下是对协程通信的详细讲解&#xff0c;包括常见的通信原语、使用场景和示例代码。 1.1 Channel 定义&#xff1a;Channel 是一个消息队列&a…...

AI 商业化部署中,ollama 和 vllm 的选型对比

介绍 ollama Ollama是指一个开源的大模型服务工具&#xff0c;旨在简化大型语言模型&#xff08;LLM&#xff09;的本地部署、运行和管理。它让用户能够在本地设备上轻松运行和管理各种大语言模型&#xff0c;无需依赖云端服务。 vllm 在深度学习推理领域&#xff0c;vLLM框…...

mysql的乐观锁与悲观锁

1.悲观锁 含义&#xff1a;假设会发生冲突&#xff0c;因此在操作数据之前对数据加锁&#xff0c;确保其他事务无法访问该数据。 应用场景&#xff1a;适用于并发冲突多&#xff0c;写多读少的场景&#xff0c;通过加锁的方式确保数据的安全性。 实现方式&#xff1a;使用行…...

进程——概念及状态

目录 概念 介绍 举例 进程状态 概念 解释 实例 R S T t Z 孤儿进程 概念 介绍 大多数初学者会认为进程就是从硬盘加载到内存的可执行文件&#xff08;当可执行文件被加载到内存里称为程序&#xff09;&#xff0c;实际上并不是这样的&#xff0c;进程其实是操作系…...

服务器数据恢复—Linux系统服务器崩溃且重装系统的数据恢复案例

服务器数据恢复环境&#xff1a; linux操作系统服务器中有一组由4块SAS接口硬盘组建的raid5阵列。 服务器故障&#xff1a; 服务器工作过程中突然崩溃。管理员将服务器操作系统进行了重装。 用户方需要恢复服务器中的数据库、办公文档、代码文件等。 服务器数据恢复过程&#…...

【git】git commit模板

【git】git commit模板 目录 【git】git commit模板1.使用git commit 模板操作步骤&#xff1a;使用示例&#xff1a; 2. gitlab merge 模板 1.使用git commit 模板 操作步骤&#xff1a; 设置模板路径,其中path就是commit模板路径 git config --global commit.template path设…...

IGBT选型时需关注的参数,适用场景(高压大电流低频)以及驱动电路设计注意事项

概述 IGBT&#xff08;绝缘栅双极型晶体管&#xff09;是电力控制和电力转换的核心器件&#xff0c;是由BJT&#xff08;双极型晶体管&#xff09;和MOS&#xff08;绝缘栅型场效应管&#xff09;组成的复合全控型电压驱动式功率半导体器件。有高输入阻抗&#xff08;MOSFET优点…...

hghac集群服务器时间同步(chrony同步)

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;银河麒麟&#xff08;龙芯&#xff09;svs,银河麒麟 &#xff08;X86_64&#xff09;,银河麒麟 &#xff08;飞腾&#xff09;,银河麒麟 &#xff08;鲲鹏&#xff09;,银河麒麟 &#xff08;海光&#xff09;,银河麒…...

Linux 特权管理与安全——从启用 Root、Sudo 提权到禁用与防护的全景解析

一、前言 为什么关注特权&#xff1f; Root&#xff08;超级用户&#xff09;拥有系统所有权限&#xff0c;一旦被滥用或入侵&#xff0c;后果不堪设想。运维与安全的平衡 既需要日常运维中快速提权执行管理任务&#xff0c;又要避免过度开放特权带来的风险。攻防同源理念 了解…...

初识Linux · 数据链路层

目录 前言&#xff1a; 以太网帧协议 ARP协议 ARP协议理解 ARP协议字段 交换机 前言&#xff1a; 前文我们通过OSI模型&#xff0c;一直到TCP/IP四层模型&#xff0c;经过了三篇文章左右的功夫&#xff0c;我们把网络层介绍完毕&#xff0c;主要还是介绍的IP协议的iphdr…...

Linux探秘:驾驭开源,解锁高效能——基础指令

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...

【Linux】第二十二章 访问网络附加内存

1. NFS的主要功能是什么&#xff1f; NFS是由Linux、UNIX及类似操作系统使用的互联网标准协议&#xff0c;主要功能就是提供网络文件共享&#xff0c;允许不同的计算机系统之间通过网络共享文件&#xff0c;它使得网络上的计算机能够像访问本地文件系统一样访问远程计算机上的…...

Revit BIM 模型批量转换为 Datasmith 格式教程

Revit BIM 模型批量转换为 Datasmith 格式教程 一、背景与痛点 在建筑信息模型(BIM)与游戏开发的协同工作中,常需将 Revit 模型导入虚幻引擎(UE)。虽然 Revit 的 Datasmith 插件可实现单文件转换,但面对成百上千个模型时,手动操作效率极低。本文将分享如何开发一个自动…...

Linux 磁盘扩容实战案例:从问题发现到完美解决

Linux 磁盘扩容实战案例&#xff1a;从问题发现到完美解决 案例背景 某企业服务器根目录 (/) 空间不足&#xff0c;运维人员通过 df -h 发现 /dev/vda1 分区已 100% 占满&#xff08;99G 已用&#xff09;。检查发现物理磁盘 /dev/vda 已扩展至 200G&#xff0c;但分区和文件…...

Linux 系统不终止进程的情况下关闭长连接

使用 tcpkill 中断指定 TCP 连接 适用场景&#xff1a;需主动中断已知源IP或目标端口的连接&#xff0c;无需进程重启。 安装 dsniff 工具&#xff08;包含 tcpkill&#xff09;&#xff1a; yum -y install dsniff 捕获并杀死特定连接&#xff08;例如目标IP 192.168.1.10…...

从零开始创建React项目及制作页面

一、React 介绍 React 是一个由 Meta&#xff08;原Facebook&#xff09; 开发和维护的 开源JavaScript库&#xff0c;主要用于构建用户界面&#xff08;User Interface, UI&#xff09;。它是前端开发中最流行的工具之一&#xff0c;广泛应用于单页应用程序&#xff08;SPA&a…...

Unity-编辑器扩展

之前我们关于Unity的讨论都是针对于Unity底层的内容或者是代码层面的东西&#xff0c;这一次我们来专门研究Unity可视化的编辑器&#xff0c;在已有的基础上做一些扩展。 基本功能 首先我们来认识三个文件夹&#xff1a; Editor&#xff0c;Gizmos&#xff0c;Editor Defaul…...

系分论文《论遗产系统演化》

系统分析师论文范文系列 摘要 2022年6月,某金融机构启动核心业务系统的技术升级项目,旨在对其运行超过十年的遗留系统进行演化改造。该系统承担着账户管理、支付结算等关键业务功能,但其技术架构陈旧、扩展性不足,难以适应数字化转型与业务快速增长的需求。作为系统分析师,…...

Django基础(二)Django 项目基础操作

一、实验目标 熟悉 Django 基本命令 理解 Django 项目和应用的目录结构 掌握项目初始化、应用创建与注册、项目启动、视图函数编写、路由配置、数据库配置等基础操作 二、Django 项目初始化 进入虚拟环境 source venv/bin/activate创建 Django 项目 django-admin startproje…...

【图像大模型】Stable Video Diffusion:基于时空扩散模型的视频生成技术深度解析

Stable Video Diffusion&#xff1a;基于时空扩散模型的视频生成技术深度解析 一、架构设计与技术演进1.1 核心模型架构1.2 技术创新点1.2.1 运动预测网络1.2.2 层级式训练策略 二、系统架构解析2.1 完整生成流程2.2 性能指标对比 三、实战部署指南3.1 环境配置3.2 基础推理代码…...

【免杀】C2免杀技术(七)远程线程注入

远程线程注入&#xff08;Remote Thread Injection&#xff09;是一种常见的进程注入技术&#xff0c;经常用于红队渗透、恶意软件加载、持久化控制等场景中&#xff0c;尤其在免杀&#xff08;AV/EDR bypass&#xff09;应用领域中&#xff0c;是一种历史悠久但依然有效的手段…...

二、【环境搭建篇】:Django 和 Vue3 开发环境准备

【环境搭建篇】&#xff1a;Django 和 Vue3 开发环境准备 前言为什么我们需要特定的开发环境&#xff1f;准备工作第一步&#xff1a;搭建后端开发环境 (Python, Django, DRF)1. 安装 Python2. 创建和激活 Python 虚拟环境3. 在虚拟环境中安装 Django 和 DRF 第二步&#xff1a…...