【发布时间】:2012-01-31 18:32:24
【问题描述】:
昨天,我在这里提问:how do disable disk cache in c# invoke win32 CreateFile api with FILE_FLAG_NO_BUFFERING。
在我的性能测试显示(读写测试,1000 个文件,总大小 220M)中,FILE_FLAG_NO_BUFFERING 无法帮助我提高性能并低于 .net 默认磁盘缓存,因为我尝试将FILE_FLAG_NO_BUFFERING 更改为FILE_FLAG_SEQUENTIAL_SCAN 可以达到.net默认磁盘缓存,速度快一点。
之前,我尝试用mongodb的gridfs特性替换windows文件系统,效果不好(而且我不需要使用分布式特性,只是尝尝)。
在我的产品中,服务器每秒可以通过 tcp/ip 获取大量较小的文件(60-100k),然后需要将其保存到磁盘,第三个服务读取这些文件一次(只需读取一次和过程)。如果我使用异步 I/O 是否可以帮助我,是否可以获得最佳速度和最佳低 CPU 周期?有人可以给我建议吗?或者我仍然可以使用 FileStream 类?
更新 1
内存映射文件能否达到我的要求。所有文件写入一个或多个大文件并从中读取?
【问题讨论】:
-
如果只处理一次,真的有必要将这些文件写入磁盘吗?
-
只需转到您的问题并通过选中 anwes 旁边的“右箭头”来标记帮助您完成任务的答案... :-)
-
@Pankaj Upadhyay,谢谢,我解决了。我会注意的。
-
从您对 Tigran 帖子的评论中可以清楚地看出您正在尝试解决错误的问题。您必须限制客户端,以防止它们以高于您可以处理的速度上传文件。如果这不可接受,那么您将需要在问题上投入硬件。
标签: c# .net performance io filesystems