适用于.NET的可编程RAM磁盘API?

Joh*_*n K 12 .net windows

寻找RAM磁盘API(或实现的等效软件集)临时存储文件以用于物理硬盘环境之外的读/写操作.

更新 Exe文件将被写入RAM磁盘并执行.

Rob*_*cks 8

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;
    }
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*fer 7

"RAM磁盘"是操作系统级别构造,因为它必须实现文件系统和设备驱动程序来模拟磁盘.你不能在图书馆一级这样做.

如果您想要追求操作系统级别,Windows附带内置的ramdisk.sys驱动程序.

否则,将文件读入应用程序中的数据结构将具有与使用RAM磁盘相同的性能特征.通常,当应用程序不知道它正在运行RAM缓存文件时,会使用RAM磁盘.如果您的应用程序知道它想要这样做的事实,只需直接将数据读入您的应用程序.