假设我收到了.csv
- 网络文件,
所以我有一个byte[]
我还有一个解析器,它可以读取.csv
- 文件,并用它来处理业务,
使用File.ReadAllLines()
。
到目前为止我做了:
File.WriteAllBytes(tempPath, incomingBuffer);
parser.Open(tempPath);
不过,我不会需要这个设备上的实际文件。
有没有办法将这个文件“存储”到某个虚拟位置并从那里再次“打开”它,但是所有内存都存在?
这样可以节省我等待IO操作完成的时间(good article关于编码恐怖的情况),
加减少驱动器的磨损(相关的,如果每分钟发生几十次24/7)
一般来说,消除了一个失败点
这有点在UNIX方向,一切都是文件流,但我们在这里谈论窗口。
答案 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有很好的支持)。然而,通过它的声音,这可能对你没有多大帮助。