暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

C#内存映射文件消息队列实战演练(MMF—MQ)

1139

一、课程介绍

本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集、整理和完善此系列课程!

消息队列这个概念名称相对大家都不陌生!今天阿笨这里说的MQ并不是内存队列(Queue)和第三方MQ中间件(RabbitmQ、ActiveMQ等等),也不是第三方缓存组件( Memcached ,Redis ),这里的说的是内存映射文件消息队列(Memory-Mapped File MQ)

阿笨总结一下我们实际项目中一般运用到队列(MQ)解决实际的场景问题如下:
1)、异步处理 ,解决简单的并发处理问题。
2)、应用解耦,解决不同系统之间的数据交互问题。

1.1、本次分享课学完后我们要达到学习的目标和成果?

基于内存映射文件的特点,我们需要设计和实现了一个简单的消息队列,它消息可以持久化,并且可以实现跨程序的生产者/消费者通信,阿笨将带领大家学习这个消息队列的功能、用法、设计和实现代码。

1.2、一句话总结今天我们要解决的问题?

如何基于内存映射文件实现支持生产消费者模式、跨进程访问的持久化消息队列。

如果您同样对本次分享《C#内存映射文件消息队列实战演练(MMF MQ)》课程感兴趣的话,那么请跟着阿笨一起学习吧。

废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运工。 

二、概念名称含义解释

2.1、什么是虚拟内存盘?

虚拟内存盘是通过软件将一部分内存(RAM)模拟为硬盘来使用的一种技术。相对于直接的硬盘文件访问来说,这种技术可以极大的提高在其上进行的文件访问的速度。但是RAM的易失性也意味着当关闭电源后这部分数据将会丢失。默认情况 MSMQ的消息是持久化在我们的电脑硬盘中的,其实我们可以通过虚拟内存盘提高MSMQ的消息吞吐能力!

2.2、什么是内存映射文件?

内存映射文件,内存映射文件不是.NET 4.0引入的概念,而是操作系统提供的一种功能,大部分操作系统都支持。即:内存映射文件是由一个文件到进程地址空间的映射。所谓内存映射文件,就是将文件映射到内存,文件对应于内存中的一个字节数组,对文件的操作变为对这个字节数组的操作,而字节数组的操作直接映射到文件上。这种映射可以是映射文件全部区域,也可以是只映射一部分区域。

2.3、内存映射文件具备的特点?

内存映射文件是单一机器多进程间数据通信的最高效的方式。

2.4、内存映射文件应用场景?

1、大文件,要求极高的读写效率。

2、不同程序间进行数据共享和通信。

2.5、什么是内存消息队列(Memory- MQ)?

C# 队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。 说到这里需要特别提到的一个C#高效的线程安全队列ConcurrentQueue ,该队列是线程安全的。

2.6、什么是内存映射文件消息队列(Memory-Mapped File—MQ)?

内存消息队列(Memory- MQ)我们都知道它是属于单应用程序的常驻在内存中,一旦应用程序重启后,那么内存中的队列消息将丢失!

内存映射文件消息队列(MMF MQ)就是在内存消息队列(Memory- MQ) 的基础上实现的一套支持消息持久化,并且可以实现跨程序的生产者/消费者通信的消息队列。

参考文章:

https://www.cnblogs.com/briny/archive/2012/11/25/2787188.html

2.7、C# MemoryMappedFile是什么?

MemoryMappedFile 是.NET 4.0操作内存文件映射的类库,它比用C#直接通过调用WINDOWS API方便多了!

MemoryMappedFile 有两种类型的内存映射文件 :

1)、MemoryMappedFile.CreateFromFile 方法,表达从磁盘上的文件中获取表示持久内存映射文件的 MemoryMappedFile 对象。

 2)、MemoryMappedFile.CreateNew 方法。- 或 -MemoryMappedFile.CreateOrOpen 方法,表示获取表示非持久内存映射文件(与磁盘上的文件不关联)的 MemoryMappedFile 对象。

三、C#内存映射文件消息队列实战演练

3.1、MMF 文件(File)写入/读取实战演练X


MMF 文件(File)写入/读取实战演练


3.2、MMF 消息队列(MQ)写入/读取实战演练



MMF 消息队列(MQ)写入/读取实战演练

四、总结

希望学完本次分享课程后有所收获,真真做到学以致用并灵活的运用到实际项目当中去解决我们的业务问题。同时我们也要注意具体场景用什么技术,也千万不要一个技术吃遍所有的场景!

一切只讲理论知识不结合实战项目演练的技术分享课程都是耍流氓!  

最后还是送大家一句话:师父领进门修行在个人,希望大家在学习的道路上一直坚持下去! 



在线观看



不信的话,扫一扫


文章转载自跟着阿笨一起玩NET,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论