C#共享内存实例 附源码
原文 C#共享内存实例 附源码
网上有C#共享内存类,不过功能太简单了,并且写内存每次都从开头写。故对此进行了改进,并做了个小例子,供需要的人参考。
主要改进点:
通过利用共享内存的一部分空间(以下称为“数据信息区”)来存储当前内存中存储的数据信息(count和length或者添加其他信息),完成了对内存读写功能的完善。
在读写内存时,读写数据信息区。
1.写共享内存
根据共享内存当前的使用length,依次往后写。
2.读共享内存
读取从共享内存的起始位置(不包括数据信息区)至length的所有数据。
3.关键点
把IntPtr型的m_pwData当指针来操作,实现从内存的任意位置读写数据。
m_pwDataWrite = (IntPtr)(m_pwData.GetHashCode() + m_length + infoSize);
4.可改进处
在数据信息区,添加每条数据的length信息,即可实现自由读取数据,而不必每次都起始读。
实例截图如下:

读数据信息:
public int ReadLengthAndCount()
{
Byte[] bytData = new Byte[infoSize];
if (infoSize > m_MemSize) return 2; //超出数据区
if (m_bInit)
{
Marshal.Copy(m_pwData, bytData, 0, infoSize);
}
else
{
return 1; //共享内存未初始化
}
String str = System.Text.Encoding.Unicode.GetString(bytData).Trim('/0');
String [] strs = System.Text.RegularExpressions.Regex.Split(str,"/0");
m_length = System.Convert.ToInt32(strs[0]);
m_count = System.Convert.ToInt32(strs[1]);
return 0; //读成功
}
写数据信息:
public int WriteLengthAndCount(int length, int count)
{
semWriteLength.WaitOne();
if (infoSize > m_MemSize) return 2; //超出数据区
String strLengthAndCount = System.Convert.ToString(length) + "/0" + System.Convert.ToString(count);
Byte[] bytData = System.Text.Encoding.Unicode.GetBytes(strLengthAndCount);
if (m_bInit)
{
Marshal.Copy(bytData, 0, m_pwData, bytData.Length);
}
else
{
semWriteLength.Release();
return 1; //共享内存未初始化
}
semWriteLength.Release();
return 0;
}
源码(工程文件)下载地址:
http://download.csdn.net/source/798731
本工程在以下环境下编译通过:
Windows XP SP3
Microsoft Visual C# 2005
Microsoft Visual Studio 2005 V8.0.50727.42
Microsoft .NET Framework V2.0.50727
C#共享内存实例 附源码的更多相关文章
- Android网络:HTTP之利用HttpURLConnection访问网页、获取网络图片实例 (附源码)
http://blog.csdn.net/yanzi1225627/article/details/22222735 如前文所示的TCP局域网传送东西,除了对传输层的TCP/UDP支持良好外,Andr ...
- 基于Redis缓存的Session共享(附源码)
基于Redis缓存的Session共享(附源码) 在上一篇文章中我们研究了Redis的安装及一些基本的缓存操作,今天我们就利用Redis缓存实现一个Session共享,基于.NET平台的Seesion ...
- (转)干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码)
干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码) 该博客来源自:https://mp.weixin.qq.com/s?__biz=MzA4NzE1NzYyMw==& ...
- 业务类接口在TCP,HTTP,BLL模式下的实例 设计模式混搭 附源码一份
业务类接口在TCP,HTTP,BLL模式下的实例 设计模式混搭 附源码一份 WinForm酒店管理软件--框架这篇随笔可以说是我写的最被大家争议的随笔,一度是支持和反对是一样的多.大家对我做的这个行业 ...
- 超详细的php用户注册页面填写信息完整实例(附源码)
这篇文章主要介绍了一个超详细的php用户注册页面填写信息完整实例,内容包括邮箱自动匹配.密码强度验证以及防止表单重复等,小编特别喜欢这篇文章,推荐给大家. 注册页面是大多数网站必备的页面,所以很有必要 ...
- HTML5与CSS3实例教程(第2版) 附源码 中文pdf扫描版
HTML5和CSS3技术是目前整个网页的基础.<HTML5与CSS3实例教程(第2版)>共分3部分,集中讨论了HTML5和CSS3规范及其技术的使用方法.这一版全面讲解了最新的HTML5和 ...
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- Spring-Session实现Session共享实现原理以及源码解析
知其然,还要知其所以然 ! 本篇介绍Spring-Session的整个实现的原理.以及对核心的源码进行简单的介绍! 实现原理介绍 实现原理这里简单说明描述: 就是当Web服务器接收到http请求后,当 ...
- 微服务8:通信之RPC实践篇(附源码)
★微服务系列 微服务1:微服务及其演进史 微服务2:微服务全景架构 微服务3:微服务拆分策略 微服务4:服务注册与发现 微服务5:服务注册与发现(实践篇) 微服务6:通信之网关 微服务7:通信之RPC ...
随机推荐
- wget多进程抓取的实现
把以前博客的东西夜迁移过来吧,这个是以前公司做的,原来放在csdn里面,先切过来. 用多进程实现的 wget多进程抓取的实现,有问题联系我 (微博:偶是周亮) #!/bin/bash url_path ...
- 有关android源码编译的几个问题
项目用到编译环境,与源码有些差异不能照搬,关键是连源码都没编译过,下面基本上是行网上照的各种自学成才的分享,病急乱投医了,都记在下面作为参照吧. 1.验证是否编译正确,在终端执行 emulator & ...
- Linux各个发行版本的介绍, 以及VirtualBox+CentOS的安装步骤
Linux和Unix系统有哪些主要的发行版本 Unix: (非开源传统商业操作系统) IBM AIX, HP HP-UX, Sun Solaris,等 各家硬件厂商的发行版本, 往往是和自家的硬件设备 ...
- Expression Language
EL找不到属性会返回"" page –- request --- session --- application ------------------------------- ...
- http 响应头之location
<pre name="code" class="html">jrhmpt01:/root# cat login_yylc.pl use LWP::U ...
- HDU 4622 Reincarnation(后缀自动机)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4622 [题目大意] 给出一个长度不超过2000的字符串,有不超过10000个询问,问[L,R]子串 ...
- openStack icehouse for centos6.4 production Env 实战
production Env brief Overview: Management Node: controller.cc 10.114.100.115 Neutron Network Node: ...
- spring集成mongodb封装的简单的CRUD
1.什么是mongodb MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB MongoDB是一个介 ...
- iOS加载HTML, CSS代码
NSString *strHTML = @"<div style=\"text-align:center;\"><img src=\"/Upl ...
- 【iOS-Android开发对照】之 数据存储
[iOS-Android开发对照]之 数据存储 写在前面的话 相比Android和iOS,我认为Android的数据存储更开放一些.Android天生就能够使用多Java I/O:并且天生开放的特性, ...