虚拟临时文件,省略IO操作

时间:2014-07-17 09:46:54

标签: c# .net file

假设我收到了.csv - 网络文件,
所以我有一个byte[] 我还有一个解析器,它可以读取.csv - 文件,并用它来处理业务,
使用File.ReadAllLines()
到目前为止我做了:

File.WriteAllBytes(tempPath, incomingBuffer);
parser.Open(tempPath);

不过,我不会需要这个设备上的实际文件。

有没有办法将这个文件“存储”到某个虚拟位置并从那里再次“打开”它,但是所有内存都存在?

这样可以节省我等待IO操作完成的时间(good article关于编码恐怖的情况),
加减少驱动器的磨损(相关的,如果每分钟发生几十次24/7) 一般来说,消除了一个失败点 这有点在UNIX方向,一切都是文件流,但我们在这里谈论窗口。

1 个答案:

答案 0 :(得分:1)

但我还是不需要这台设备上的实际文件。 - 好吧,如果您的所有API都希望磁盘上有文件,那就好了。

你可以:

1)获得不错的API(我确信有一些CSV解析器将Stream作为construtor参数 - 例如,您可以使用MemoryStream。)

2)如果性能严重问题,并且您无法处理API,那么只需要一个简单的解决方案:编写自己的ramdisk实现,将缓存所需的所有内容,并在必要时将页面内容写入硬盘。

http://code.msdn.microsoft.com/windowshardware/RAMDisk-Storage-Driver-9ce5f699(哦,我提到你绝对需要对驾驶员有疯狂经验:p?)

还有"准备好" ramdisk的解决方案( Google!),这意味着你可以运行(在你的应用程序初始化程序中)'CreateRamDisk.exe -Hdd "__MEMDISK__"'(例如),并使用File.WriteAllBytes("__MEMDISK__:\yourFile.csv");

或者你可以阅读有关内存映射文件的信息(> = C#4.0有很好的支持)。然而,通过它的声音,这可能对你没有多大帮助。