English 中文(简体)
文件I/O有流体——最佳记忆缓冲尺寸
原标题:File I/O with streams - best memory buffer size

我正在撰写一个小型的I/O图书馆,协助开展一个大型(霍比)项目。 该图书馆的一部分在文件上履行各种职能,通过<代码>FileStream物体读/写。 每一份<代码>StreamReader.Read(......)

我在一次主要镜头中将用来展示进展信息的活动中丧生。 lo体内进行的处理是公平的,但不是太费时(它只能是简单的档案副本,例如,或可能涉及加密......)。

我的主要问题是:什么是最佳的缓冲规模? 想一下实物软盘布,我可以选取2k,涵盖CD部门的规模,是512个硬盘部门的冰箱。 Higher树高,你可以走大的缓冲地带,届时可以读到整个FAT集群。 我与今天的PC言一样,可以选择一个更加记忆犹豫的饥饿方案(例如,MiB两岸),但随后,我会把国际不动产业联合会最新消息与用户认为反应较少的申请时间相加。

除此以外,我最终希望与设在FTP/HTTP服务器(超过一个当地网络/快车式DSL)上的档案提供类似的接口。 对那些人来说,什么是最佳的记忆缓冲规模(而不是在感觉到的响应与业绩之间的“最佳”权衡)?

最佳回答

档案系统已经对藏匿点进行缓冲。 你们只是需要找到一个缓冲地带,使当地的Windows ReadFile(Windows)成为一种力量。 北极环境倡议经常呼吁填补缓冲地带。 Don t go under a kilobyte, more than 16 KB is a waste of memory and unasi to the CPU s L1 cache (typically 16 or 32 KB of data)。

4 KB是一种传统选择,尽管这种选择将完全跨越一个几乎一度的记忆页。 很难说明情况;你最终衡量读卡文件所需时间。 如果在海滩上有数据,则按区域援助团的速度、5千兆字节/秒进行,并更新。 这将是你第二次接受过检测,在生产环境中也经常发生。 文件I/O完全以磁盘驱动器或NIC为主,而且明显缓慢,复制数据是图纸。 4 KB将罚款。

问题回答

当我直接通过下游物体处理档案时,我通常使用4096 by。 在多个I/O地区(地方档案系统、局域网/SMB、网络流等)中,这似乎具有合理效力,但我登上了该表或任何内容。 当我看到几个例子使用这一规模时,我回头来,我记忆犹豫不决。 这并不意味着这是最好的。

“它取决于”。

你们必须用不同的缓冲规模来检验你的申请,以确定 whi。 你们可以提前猜测。

我假定,违约值是usually,因此最佳――即使用4096B,其依据是 变式>:DefaultBufferSize,载于FileStream





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签