如何动态扩展内存映射文件
|
我已经使用C#解决了以下要求。
-创建一个可以快速接收大量数据的应用程序
-您必须能够在收到更多数据时分析接收到的数据。
-使用尽可能少的CPU和磁盘
我对算法的想法是
SIZE = 10MB
Create a mmf with the size of SIZE
On data recived:
if data can\'t fit mmf: increase mmf.size by SIZE
write the data to mmf
->使用先前的“房间/空间”时,光盘上的大小增加10MB。
如何在C#中完成“按大小增加mmf.size”?我已经找到了许多有关创建mmfs和视图的简单示例,但是我看到的唯一的地方(链接)会大幅增加mmfs区域的代码使用了无法编译的代码。任何帮助将不胜感激。
编辑
这将导致异常:
private void IncreaseFileSize()
{
int theNewMax = this.currentMax + INCREMENT_SIZE;
this.currentMax = theNewMax;
this.mmf.Dispose();
this.mmf = MemoryMappedFile.CreateFromFile(this.FileName, FileMode.Create, \"MyMMF\", theNewMax);
this.view = mmf.CreateViewAccessor(0, theNewMax);
}
引发此异常:该进程无法访问文件\'C:\\ Users \\ moberg \\ Documents \\ data.bin \',因为该文件正在被另一个进程使用。
没有找到相关结果
已邀请:
5 个回复
抢垢洛韧
管理这些(可能从
进行所需方法的基本传递)。 编辑:或者您可以只创建一个您希望使用的最大大小的非持久性内存映射文件(例如,启动8GB,并在应用程序启动时使用参数对其进行调整),并在每个逻辑上检索
块。在请求每个视图之前,非持久文件将不使用物理资源。
桔马牛
这是the6ѭ类:
这是you8ѭ类:
如您所见,我采用了不安全的方法。这是获得内存映射文件性能优势的唯一方法。 为此,您需要考虑以下概念: 块或页面。这是您使用连续内存地址和存储空间的最小区域。块或页面的大小必须是基础系统页面大小(4Kb)的倍数。 初始文件大小。它必须是块或页面大小的倍数,并且必须是系统分配粒度(64Kb)的倍数。 文件增长。它必须是块或页面大小的倍数,并且必须是系统分配粒度(64Kb)的倍数。 例如,您可能要使用1Mb的页面大小,64Mb的文件增长和1Gb的初始大小。您可以通过调用
获得指向页面的指针,使用
扩展文件并使用
刷新文件:
倾坞髓
或使用此重载来跳过filstream的创建:
济畦刨
参数的
重载。
掀辟髓观粟
而且真的很快。