微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以编程方式创buildRAM磁盘?

我不是在寻找一个调用命令行实用程序的代码,这个实用技巧。 我真的有兴趣知道用来创build一个RAM磁盘的API。

谢谢。

编辑

动机:我有一个第三方库,它需要一个目录名称,以便以某种方式处理该目录中的文件。 我把这些文件压缩到档案中。 我希望将存档解压缩到RAM磁盘中,并将第三方path传递到该RAM磁盘上的相应目录。 正如你所看到的, 内存映射文件对我来说没有用处

在C中保留RAM

用perl / cmd窗口查找内存types

在Linux中将数据写入RTC spare ram

当电脑从睡眠模式唤醒时,是否使用与以前相同的物理地址?

testing与服务器的20k客户端连接

在Linux中测量库的大小

随机数据填充内存

如何检索64位Windows 7上的RAM

如何获得系统(Windows)的内存在r

主内存中的操作系统内核和进程

没有API可以创建一个RAM磁盘本身。 您需要编写自己的设备驱动程序,向系统显示一个新的磁盘,并使该设备驱动程序与分配的内存一起工作。

编辑(在OP的编辑之后)

你所要做的通常是使用'temp'目录来完成,该目录应该位于系统中最快的磁盘上。 因此,已经有RAMdisk的系统可能已经将其临时环境变量设置为指向RAMdisk上的文件夹,并且没有RAMdisk的系统将简单地采取性能损失,这是他们的问题。

现在,如果出于某种原因,你不能依赖系统上存在的RAMdisk,并且你绝对需要尽可能最快的性能,那么除了安装第三方(也许是免费下载的,甚至可能是开源的) RAM磁盘,暂时使用它,然后卸载它。 但是这非常笨重。

Imdisk是一个RAM磁盘应用程序,可以从内存扇区创建一个虚拟驱动器,并具有可以从.NET调用的API。

class Ramdisk { public const string MountPoint = "X:"; public void createramdisk() { try { string initializedisk = "imdisk -a "; string imdiskSize = "-s 1024M "; string mountPoint = "-m "+ MountPoint + " "; processstartinfo procStartInfo = new processstartinfo(); procStartInfo.UseShellExecute = false; procStartInfo.CreateNowindow = true; procStartInfo.FileName = "cmd"; procStartInfo.Arguments = "/C " + initializedisk + imdiskSize + mountPoint; Process.Start(procStartInfo); formatRAMdisk(); } catch (Exception objException) { Console.WriteLine("There was an Error,while trying to create a ramdisk! Do you have imdisk installed?"); Console.WriteLine(objException); } } /** * since the format option with imdisk doesn't seem to work * use the fomat X: command via cmd * * as I would say in german: * "Von hinten durch die Brust ins Auge" * **/ private void formatRAMdisk(){ string cmdFormatHDD = "format " + MountPoint + "/Q /FS:NTFS"; securestring password = new securestring(); password.AppendChar('0'); password.AppendChar('8'); password.AppendChar('1'); password.AppendChar('5'); processstartinfo formatRAMdiskProcess = new processstartinfo(); formatRAMdiskProcess.UseShellExecute = false; formatRAMdiskProcess.CreateNowindow = true; formatRAMdiskProcess.RedirectStandardInput = true; formatRAMdiskProcess.FileName = "cmd"; formatRAMdiskProcess.Verb = "runas"; formatRAMdiskProcess.UserName = "Administrator"; formatRAMdiskProcess.Password = password; formatRAMdiskProcess.Arguments = "/C " + cmdFormatHDD; Process process = Process.Start(formatRAMdiskProcess); sendCMDInput(process); } private void sendCMDInput(Process process) { StreamWriter inputWriter = process.StandardInput; inputWriter.WriteLine("J"); inputWriter.Flush(); inputWriter.WriteLine("RAMdisk for valueable data"); inputWriter.Flush(); } public string getMountPoint() { return MountPoint; } }

你没有提到的语言,S我的答案是在C#中:

内存映射文件包含虚拟内存中文件内容文件和内存空间之间的映射使应用程序(包括多个进程)能够通过直接读写内存来修改文件。 从.NET Framework版本4开始,您可以使用托管代码以本地Windows函数访问内存映射文件的相同方式访问内存映射文件,如管理MSDN Library中的Win32中的内存映射文件中所述。

http://msdn.microsoft.com/en-us/library/dd997372.aspx

MemoryMappedFile MemoryMapped = MemoryMappedFile.CreateOrOpen( new FileStream(@"C:tempMap.mp",FileMode.Create),// Any stream will do it "MyMemmapFile",// Name 1024 * 1024,// Size in bytes MemoryMappedFileAccess.ReadWrite); // Access type

//创建地图视图并阅读它:

using (MemoryMappedViewAccessor FileMap = MemoryMapped.CreateViewAccessor()) { Container NewContainer = new Container(); FileMap.Read<Container>(4,out NewContainer); }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐