使用.NET创建虚拟磁盘?

8
我在 Stack Overflow 上找到了很多与这个有关的好话题,但我的问题更加具体。许多公司正在使用这个软件来托管和我们一样的服务...

http://memory.dataram.com/products-and-services/software/ramdisk

显然,虚拟磁盘的读写速度非常快,而且由于我们运行的是非常密集的 I/O 软件,因此我想编写一些代码来做同样的事情。我的唯一需求是希望能够在虚拟驱动器上运行应用程序(以获取更高的 I/O 速度),并将数据每 X 分钟复制到物理位置的硬盘上。

这是否很容易实现?我应该使用什么来实现这个呢?

编辑

看起来我可以使用以下 Dokan 库,但是在 Windows 中使用 "subst" 命令会产生任何 I/O 性能的提升,还是这个库是最好的选择?

http://dokan-dev.net/en/about/


只需创建一个队列来保存所有数据。随着新对象的添加,队列将动态增长,您可以定期触发“writeQueueToHardDrive”函数,该函数会将队列前面的项目取出直到为空。 - Frosty840
@Brett - 当然它在内核级别运行 - 但你必须处理I/O调用。一个Queue是完全基于内存的。 - Daniel A. White
这对我来说是一个新的领域,但这很有道理。所以基本上只需将他们应用程序目录的所有内容加载到RAM中,然后从那里启动Java进程? - user470760
1
或者说,仍然从C:\驱动器启动Java,但对于指定要加载的-jar文件的参数,请将其指定为已加载到RAM中的文件? - user470760
好的,我不能说你需要将整个目录加载到内存中,这取决于应用程序。但是,如果你想从硬盘获取数据,就要从硬盘加载它。如果你想将数据放在硬盘上,就把它放在硬盘上。如果你需要访问数据,你已经把它加载到RAM中了。正如我之前所说,除非你将其用作在程序之间加载数据的快捷方式,否则我看不出你在使用RAM驱动器方面有多大用处。 - Frosty840
显示剩余5条评论
2个回答

7
这不是一个关于C#/.NET的问题,除非您想编写自己的RAM磁盘驱动程序。像您链接中的那种驱动程序已经存在很长时间了,它们确实具有疯狂的读/写速度,但代价是占用应用程序和操作系统的RAM可用性。如果所涉及的计算机有大量RAM,则可能不是问题。
编程的部分是定期将RAM磁盘内容写入磁盘。由于RAM磁盘通常只显示为另一个驱动器,因此将文件从其中复制到物理磁盘是一件简单的事情。您可以在C#中执行此操作,但在许多脚本语言中同样有效。
如果这是高端应用程序,请考虑固态SATA驱动器。它们的读/写速度比硬盘快得多,并且数据在崩溃、停电等情况下是持久的。

那其实是正确的。我的C#管理的子进程被分配了每个进程可以使用的X数量的RAM。这就是为什么这个软件与RamDisk一起使用的确切信息。http://www.minecraftwiki.net/wiki/Tutorials/Ramdisk_enabled_server - user470760

0
如果您确实需要一个RAM驱动器,那么您真正需要的是一个块设备驱动程序,在内核模式下完成工作。 Dokan的问题在于:(a)这是一个文件系统驱动程序,这需要您进行大量额外的工作,(b)它会回调您的用户模式代码,这会导致减速,(c)它是免费的东西,不足以用于生产环境。

3
咳咳,免费并不等同于不可靠。Linux、mvc、GNU等等。 - Russ Clarke
@Russ 我的评论特指Dokan,而非免费软件。 - Eugene Mayevski 'Callback

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接