我的情况是我有一个遗留应用程序,我没有每秒左右将数据写入磁盘的代码。我有一个我编写的 C# 程序,它每秒读取写入磁盘的内容并使用数据。数据被写入几个文本文件,我在创建之前就知道文件名。
问题是我有很多虚拟机运行这个遗留应用程序和我的程序。它们不受 ram 或 cpu 的限制,但由于文件 io 瓶颈,我不能为每台机器添加超过 10 个 VM。
有没有一种简单的方法可以在磁盘上创建一个存在于 ram 或其他东西中的文件?我听说命名管道是一种选择?
谢谢!
我的情况是我有一个遗留应用程序,我没有每秒左右将数据写入磁盘的代码。我有一个我编写的 C# 程序,它每秒读取写入磁盘的内容并使用数据。数据被写入几个文本文件,我在创建之前就知道文件名。
问题是我有很多虚拟机运行这个遗留应用程序和我的程序。它们不受 ram 或 cpu 的限制,但由于文件 io 瓶颈,我不能为每台机器添加超过 10 个 VM。
有没有一种简单的方法可以在磁盘上创建一个存在于 ram 或其他东西中的文件?我听说命名管道是一种选择?
谢谢!
您可以搜索某种内存/临时文件系统。
我不确定您是否可以在这里使用管道,因为您的旧版应用程序正在直接写入硬盘。
您确定所涉及的实际 IO 吗?
很久以前,我实现了一个非常丑陋的连接,通过文件将数据从dos程序发送到Windows程序。不过,这比每秒一次要快得多——dos 程序会在任何时间发生任何变化时发送一个 4k 块,每秒 50 次(如果它被赶上)Windows 程序会读取帧号,然后读取如果帧号不同,则为 4K 块。
这不会导致磁盘 IO!您可以坐在那里,使dos程序每秒更新帧多次,只要您愿意,硬盘驱动器灯就会保持熄灭。Windows 看到文件已打开并被频繁写入,直到更新停止,缓冲区才刷新到磁盘。
虽然我花了很多时间优化链接的 Windows 端,但它完全是在对数据所做的事情上,而不是在连接中——尽管它看起来很丑陋,但这根本不是瓶颈。
如果每次都关闭文件,Windows 可能会以不同的方式处理它。即使在那时,将其粘贴在 ramdisk 上也会阻止它进行磁盘 IO。