我不是在寻找一个调用命令行实用程序的代码,这个实用技巧。 我真的有兴趣知道用来创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] 举报,一经查实,本站将立刻删除。