【发布时间】:2011-10-26 08:49:09
【问题描述】:
对于游戏 Minecraft,运行服务器应用程序的一般方法是在 RAMDisk 中运行它,因为它使用数百个小文件来生成世界,而 I/O 速度是主要瓶颈。
在最近的一次尝试中,我尝试使用 Dokan/ImDisk 以编程方式为服务器应用程序创建 RAMDisk。 Dokan 比普通硬盘慢得多,而且我无法让 ImDisk 正常运行。由于这些是我所知道的仅有的两个具有 .NET API 的文件系统驱动程序,因此我现在正在寻找替代方案。
我之前提到过尝试内存映射文件。我目前的方法是创建 RAMDisk,在游戏服务器的数据文件夹和 RAMDisk 之间创建符号链接,然后启动游戏服务器进程。
内存映射文件能否以相同的方式运行,I.E.创建一个可以创建符号链接的虚拟驱动器?如 G:\Data_Files\?
除了 Dokan/ImDisk 之外,还有 .NET API/Bindings 浮动的其他替代品吗?
【问题讨论】:
-
不太清楚 C#/.net 是从哪里来的。
-
但是您的应用程序需要如何与 RAM 磁盘驱动程序交互?你不能只加载现有的 RAM 磁盘驱动程序。如果您想运行我的世界服务器,不确定您需要 C# 应用程序做什么。如果是你自己的应用程序而不是 minecraft ,你为什么要使用很多小文件?
-
RAM 磁盘是 DOS 时代的遗物。它是现代多任务操作系统上的宝贵资源,太宝贵了,不能浪费在存储文件上。此类操作系统具有文件系统缓存,其工作方式类似于 RAM 磁盘。但是,操作系统可以根据需要动态调整其大小,以在文件系统和需要内存的进程之间找到良好的平衡,这具有相当大的附加优势。如果有一个 ram 磁盘驱动程序可以做得比 Windows 更好,那么它就是一个保守的秘密。
-
@Hans 这并非完全如此。您可以拥有几 Gb 大的 RAM 磁盘,而缓存要小得多。确实存在几种 RAMDisk 产品,其中一些甚至在 32 位系统上支持超过 4Gb,并且它们性能完美,尤其是在保存临时文件之类的任务中。
-
只需使用 64 位操作系统。你的建议被你的商业利益蒙上了阴影。
标签: c# .net filesystems memory-mapped-files ramdisk