【发布时间】:2016-08-11 11:23:56
【问题描述】:
我正在尝试制作读取文件的应用程序。文件可能大于 2GB,因此我无法将它们完全加载到内存中。因此,我正在为 WinRT 开发文件读取系统,这允许我:
- 使用部分缓冲区读取文件 - 加载到大小为 5mb 的内存块 例如,然后用户检查是否存在所需的字节数 缓冲区。
- 授予我对文件的多线程访问权限 - 例如,我需要为 2 个断开连接的目的读取文件。
- 生成的系统必须使用尽可能少的 CPU、内存和硬盘时间。
现在我设计了一个在 1 个线程中读取带有缓冲区的文件的东西,我有一些问题:
-
DataReader->LoadAsync(N)和DataReader->ReadBytes(target_array)之间会发生什么?第一个操作是否将数据加载到内存中,第二个操作是否将数据放入目标? -
DataReader(或IRandomAccessStream,我不知道到底是哪一个)将加载的数据存储在交换文件中(用ssd驱动器捕获它:交换放在硬盘上,第二次尝试读取相同的数据显示速度与硬盘一样)。如何避免? - 我设计的阅读系统(
file->buffer->user)适合DataReader和IRandomAccessStream吗?
【问题讨论】:
-
@Yakk 仅供参考,WinRT 暗示它是 C++/CX,而不是 C++/CLI
-
@LucasTrzesniewski 啊,另一种方言?很抱歉编辑错误。
-
@Yakk 不用担心,是的,他们制作了另一种方言(不在 CLI 上运行,没有 GC,因此
gcnew关键字不合适,等等),但是它几乎语法相同:-)