C# 通过共享内存交互数据

private MemoryMappedViewAccessor _viewAccessor;

/// <summary>
/// 创建或打开共享内存
/// </summary>
/// <param name="memoryName"></param>
/// <param name="capacity"></param>
/// <param name="isOpen"></param>
public void Initializer(string memoryName, long capacity, bool isOpen = true)
{
    try
    {
       MemoryMappedFile memoryMapped = null;
       if (isOpen)
           memoryMapped = MemoryMappedFile.CreateOrOpen(memoryName, capacity);
       else
           memoryMapped = MemoryMappedFile.OpenExisting(memoryName);
       _viewAccessor = memoryMapped.CreateViewAccessor(0, capacity);
    }
    catch (Exception ex)
    {
      
      throw new Exception($"打开或创建共享内存{memoryName}失败,错误信息为{ex.Message}");
    }
}


///读取Ushort数组
public ushort[] GetUshortArrayByMemory(int position, int length)
{
      ushort[] size = new ushort[length];
      _viewAccessor.ReadArray<ushort>(position, size, 0, size.Length);
      return size;
}


///读取byte数组
public byte[] GetByteArrayByMemory(int startPos, int count)
{
      byte[] size = new byte[count];
      _viewAccessor.ReadArray<byte>(startPos, size, 0, size.Length);
      return size;
}


/// <summary>
/// 往共享内存中写入字节数
/// </summary>
/// <param name="bytes"></param>
public void Write(byte[] bytes)
{
     try
     {
       if (_viewAccessor == null)
           return;
       if (!_viewAccessor.CanWrite)
           return;
       _viewAccessor.WriteArray<byte>(0, bytes, 0, bytes.Length);
     }
     catch (Exception ex)
     {
         LogHelper.WriteLogByType(LogEnum.Error, $"写入失败,异常信息为{ex.Message}");
     }
}



/// <summary>
/// 按位置进行写入
/// </summary>
/// <param name="position"></param>
/// <param name="bytes"></param>
public void Write(int position, byte[] bytes)
{
    try
    {
        if (_viewAccessor == null)
            return;
        if (!_viewAccessor.CanWrite)
            return;
        char[] chars = Encoding.ASCII.GetChars(bytes);
        _viewAccessor.WriteArray<char>(position, chars, 0, chars.Length);
    }
    catch (Exception ex)
    {
        LogHelper.WriteLogByType(LogEnum.Error, $"写入失败,异常信息为{ex.Message}");
    }
}






备注:上述函数可以修改为泛型;

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值