c#使用内存映射像处理内存一样去快速处理文件
using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Runtime.InteropServices; class Program
{
struct Point
{
private int x;
private int y; public Point(int x, int y)
{
this.x = x;
this.y = y;
} public int X => x;
public int Y => y;
} static void Main()
{
int arrayLength = 10;
int arraySize; unsafe
{
arraySize = sizeof(Point) * arrayLength;
} using (var mmf = MemoryMappedFile.CreateFromFile("data.bin", FileMode.OpenOrCreate, "myData", arraySize))
{
using (var accessor = mmf.CreateViewAccessor())
{
unsafe
{
byte* ptr = null; try
{
accessor.SafeMemoryMappedViewHandle.AcquirePointer(ref ptr); // 将内存映射的指针转换为 Point 数组
Point* pointArrayPtr = (Point*)ptr; // 在 Point 数组中进行读写操作
for (int i = 0; i < arrayLength; i++)
{
pointArrayPtr[i] = new Point(i,i);
} // 从 Point 数组中读取数据
for (int i = 0; i < arrayLength; i++)
{
Point value = pointArrayPtr[i];
Console.WriteLine($"x={value.X}, y={value.Y}");
}
}
finally
{
if (ptr != null)
{
accessor.SafeMemoryMappedViewHandle.ReleasePointer();
}
}
}
}
}
}
}
c#使用内存映射像处理内存一样去快速处理文件的更多相关文章
- inux内存映射和共享内存理解和区别
可以看到内存映射中需要的一个参数是int fd(文件的标识符),可见函数是通过fd将文件内容映射到一个内存空间, 我需要创建另一个映射来得到文件内容并统计或修改,这时我创建这另一个映射用的仍是mmap ...
- NIO内存映射
磁盘的IO因为速度较慢,可能成为系统运行的瓶颈.所以磁盘的IO在操作系统级实现了提前读,延迟写的机制来提升IO的性能. 提前读就是一次读取需求的数据的同时多读接下来的一段数据至OS缓冲区中,延迟写就是 ...
- 内存映射文件mmap
1. mmap mmap可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址,对文件的读写可以直接用指针而不需要read/write函数.使用内存映像文件的另一个优点是可以共 ...
- 内存映射MMAP和DMA【转】
转自:http://blog.csdn.net/zhoudengqing/article/details/41654293 版权声明:本文为博主原创文章,未经博主允许不得转载. 这一章介绍Linux内 ...
- linux mmap 内存映射【转】
转自:http://blog.csdn.net/xyyangkun/article/details/7830313 [-] mmap vs readwritelseek mmap vs malloc ...
- MemoryMappedFile 内存映射文件 msdn
http://msdn.microsoft.com/zh-cn/library/dd997372%28v=vs.110%29.aspx 内存映射文件 .NET Framework 4.5 其他版本 1 ...
- C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转
原文:C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing ...
- [置顶] 内存映射失败MapViewOfFile 失败 返回 8
问题描述1 在使用内存映射方式读写数据时,将文件A的内容拷贝至文件B中,偶尔会出来文件拷贝后的文件,内容为空,或部分为空 问题分析1 怀疑是内存映射方式读写数据的稳定性(可笑的怀疑,内存映射可以Win ...
- Java NIO内存映射---上G大文件处理(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了java中内存映射的原理及过程,与传统IO进行了对比,最后,用实例说明了结果 ...
- Win 内存映射和堆栈
内存映射和堆栈 内存映射文件 内存映射文件可以用于3个不同的目的: 系统使用内存映射文件,以便加载和执行.exe和DLL文件.这可以大大节省页文件空间和应用程序启动运行所需的时间. 可以使用内存映射文 ...
随机推荐
- 第一!天翼云荣获国际人工智能顶会AAAI 2024大模型数学理解&推理竞赛冠军!
近日,AAAI 2024 Global Competition on Math Problem Solving and Reasoning大赛落下帷幕,天翼云智能边缘事业部AI团队凭借在大模型基础能力 ...
- Air实现Go程序的热重载(热加载)
简介: air是Go的热加载工具,它可以监听文件或者目录的变化,自动编译,重启程序,提高开发的工作效率. 场景: 在代码修改后需要通过ctrl+c来停止项目,go run的方式来再次重启项目,在开发进 ...
- Arduino部分C语言含义之--“::”
"::"在C++中表示作用域,和所属关系."::"是运算符中等级最高的.有三种作用. 1.作用域符号例如:A,B表示两个类,在A,B中都有成员member.那么 ...
- java list集合去重的两种方式
- pnpm : 无法加载文件 \AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。
1. 安装pnpm npm install -g pnpm #安装 pnpm pnpm --version #查看pnpm版本 安装完成后查看版本时报错 pnpm : 无法加载文件 C:\Users\ ...
- tinyint、int的区别
1.tinyint(1字节--4位[带符号]) 很小的整数.带符号的范围是-128到127.无符号的范围是0到255. 2.smallint(2字节--6位[带符号]) 小的整数.带符号的范围是-32 ...
- 添加xxx.so到环境变量里
点击查看代码 libxxx.so 文件位于 /usr/local/lib 目录下,你可以按照以下步骤操作: 创建配置文件: echo "/usr/local/lib" | sudo ...
- Win10 非正常断电重启后出现长时间磁盘100%活动占用
老毛病,以往半个小时左右会正常,这次上电1s发现风扇被卡马上关机,在启动结果硬生生卡了1h:应该是触发了微软某些后台的某些服务进程,记录一下 可疑涉事进程记录: svchost:Win服务主进程,是层 ...
- 三分钟掌握音视频处理 | 在 Rust 中优雅地使用 FFmpeg
前言 音视频处理看似高深莫测,但在开发中,我们或多或少都会遇到相关需求,比如视频格式转换.剪辑.添加水印.音频提取等. FFmpeg 作为行业标准,几乎无所不能,很多流行的软件(如 VLC.YouTu ...
- rust学习笔记(5)
函数 定义为 fn is_divisible_by(lhs: u32, rhs: u32) -> bool { 使用 -> 指向返回的类型 函数定义的位置没有限制 method 针对结构体 ...