windows - SetFileBandwidthReservation 会影响内存映射文件的性能吗?

标签 windows performance windows-server-2008 memory-mapped-files

这个函数会影响内存映射文件的性能吗?

这是我需要解决的问题:

我有两个应用程序竞争磁盘访问:“reader”和“updater”。整个系统在 Windows Server 2008 R2 x64 上运行

“Updater”不断以线性方式访问磁盘,更新数据。他们的系统设置方式使得更新程序总是有无限的数据要更新。考虑到它不断逼近占据整个 2TB 磁盘驱动器的大量方程式的解。 Updater 使用 ReadFile 和 WriteFile 以线性方式处理数据。

“Reader”偶尔被用户调用以获取一些数据。通常用户会从驱动器读取几个 4kb block 并停止。偶尔用户需要连续读取 100mb。在特殊情况下可达数 GB。 Reader 将文件映射到内存以获取所需的数据。

我想实现的是让“reader”拥有绝对优先权,这样“updater”在需要的时候就会完全停止,这样“reader”就可以尽快得到用户需要的数据。

这个问题可以通过调用 SetPriorityClass 和 SetFileBandwidthReservation 来解决吗?

我真的不想将同步登录放在“阅读器”和“更新器”中,而是让操作系统处理优先级。

最佳答案

您提到的功能与您的任务无关,IMO。

似乎实际上是在要求从多个进程同时访问文件 - 操作系统只会按照您的要求进行操作。因此,您将不得不做您~讨厌~添加一些同步逻辑以确保正确性的事情。

根据您的描述 - 打开文件以供读取器和更新器独占访问解决了使读取器不被更新器中断的任务。第二个目标是使更新程序可以根据读者的请求中断。

处理方式取决于更新程序是否可以在工作中途停止。在简单的情况下,读取器可能会通知更新器它必须尽快停止工作并等待。

关于windows - SetFileBandwidthReservation 会影响内存映射文件的性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3020997/

相关文章:

python - Dask:多重处理适用于 Mac,但不适用于 Windows

python - 为什么我的 Python 应用程序停滞在 'system'/内核 CPU 时间

java - 使用 Runtime.getRuntime().exec(String[]) 在 Java 中运行 Windows 命令

c++ - 在 Windows 上快速编译 Qt C++

mysql - 使用Mysql和Windows将常见查询存储在磁盘上

asp.net - w3wp 上的高 CPU

windows - 离线 IIS Inetmgr 扩展服务器节点缓慢(2 分钟)...

unix - 我怎么知道它是 Windows 服务器还是 Unix?

c++ - !heap -s 命令的输出需要说明

c# - 使用 Linq 创建对象列表与创建字典的性能比较?