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 ...
随机推荐
- JavaScript引用类型之Array数组的拼接方法-concat()和截取方法-slice()
1.concat() 基于当前数组中的所有项创建一个新数组(也就是副本),然后将接收到的参数添加到副本的末尾,最后返回新构建的数组.也就是说,concat()在向数组中追加元素时,不会改变原有数组 ...
- JavaScript之面向对象学习五(JS原生引用类型Array、Object、String等等)的原型对象介绍
1.原型模式的重要性不仅仅体现在创建自定义类型方面,就连所有的原生的引用类型(Obejct.Array.String等等)都在构造函数的原型上定义方法和属性.如下代码可以证明: alert(typeo ...
- 获取和设置iframe中的元素
http://www.cnblogs.com/gao-qiang/archive/2012/09/19/2694336.html http://java-my-life.iteye.com/blog/ ...
- 获取extjs text列修改过 数据
ExtJS中表格的特性简介 表格由类Ext.grid.GridPanel定义,继承自Ext.Panel,xtype为grid 表格的列信息由Ext.grid.ColumnModel定义 表格的数据存储 ...
- Hadoop基础概念介绍
基于YARN的配置信息, 参见: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ hadoop入门 - 基础概念 ...
- 容易被误解的overflow:hidden
http://www.ofcss.com/2011/03/20/misunderstood-of-overflow-hidden.html(转) 容易被误解的overflow:hidden 15条评论 ...
- 获取新浪天气api显示天气情况(转)
直接上一个html的demo <!doctype html> <html class="no-js fixed-layout"> <head> ...
- 【LeetCode题意分析&解答】34. Search for a Range
Given a sorted array of integers, find the starting and ending position of a given target value. You ...
- The method of using code coverage tool
Please look at the following blog: http://blog.csdn.net/superqa/article/details/9060521 Use ReportG ...
- [C++]Infinite House of Pancakes——Google Code Jam 2015 Qualification Round
Problem It’s opening night at the opera, and your friend is the prima donna (the lead female singer) ...