Windows runtime 如何使用irandomaccesstream和DataReader?
我正在尝试制作读取文件的应用程序。文件可能大于2GB,因此我无法将其完全加载到内存中。因此,我正在为WinRT开发文件读取系统,该系统允许我:Windows runtime 如何使用irandomaccesstream和DataReader?,windows-runtime,c++-cx,Windows Runtime,C++ Cx,我正在尝试制作读取文件的应用程序。文件可能大于2GB,因此我无法将其完全加载到内存中。因此,我正在为WinRT开发文件读取系统,该系统允许我: 使用部分缓冲区读取文件-加载到大小为5mb的内存块 例如,然后用户检查中是否存在所需的字节数 缓冲区 为我提供对文件的多线程访问—例如,我需要为两个断开连接的目的读取文件 由此产生的系统必须使用尽可能少的cpu、内存和hdd时间 现在,我设计了一种在1个线程中读取带有缓冲区的文件的方法,我有一些问题: 在DataReader->LoadAsync(N)和
DataReader->LoadAsync(N)
和DataReader->ReadBytes(目标数组)
之间会发生什么?第一个操作是否将数据装入内存,第二个操作是否将数据放入目标DataReader
(或irandomaccesstream
,我不知道具体是哪一个)将加载的数据存储在交换文件中(使用ssd驱动器捕获它:将交换放置在hdd上,第二次尝试读取相同的数据显示与hdd相同的速度)。如何避免它file->buffer->user
)是否适合DataReader
和irandomaccesstream
问得好,你说得对
DataReader->LoadAsync(uint count)
似乎从源(磁盘、网络、内存)复制数据并将其加载到读卡器的中间缓冲区。在开始从DataReader
读取之前,请确保等待返回的DataReaderLoadOperation
完成,否则将遇到一些难以调试的异常DataReader
只是为IRandomAcessStream
/IInputStream
的ReadAsync
方法提供了一个包装器。文件是否交换取决于IRandomAcessStream
的实现。默认情况下,Windows似乎会缓存文件。我查看了StorageFile
,没有找到禁用缓存的方法,但有一种方法可以通过Win32 API来实现数据读取器
的流时,数据读取器
将在其当前内部位置继续读取。它仅在再次调用LoadAsync
时更新一次。为了在多线程中使用,可以调用在指定位置创建输入流的副本,并将DataReader
绑定到该位置祝您使用这个非常有文档记录的API好运。@yakkfyi,WinRT暗示它是C++/CX,而不是C++/CLI@LucasTrzesniewski啊,还有另一种方言吗?为misedit感到抱歉。@Yakk别担心,是的,他们制作了另一种方言(它不在CLI上运行,没有GC,因此
gcnew
关键字不合适,等等),但语法几乎相同:-)