FileFlushBuffer() is so slow
FileFlushBuffer() is so slow
我们对单个大型归档文件进行重复写入(多次),并对其各个部分进行修补。每次写入后,我们都会调用FileFlushBuffer(),但发现这非常非常慢。如果我们等待,只是偶尔调用它(比如每32个文件调用一次),情况会更好,但我认为这不是正确的方法。
在我们完成最后一个补丁之前,有没有办法不刷新缓冲区?如果我们完全取消调用,close()确实会处理flush,但它本身就成为了一个巨大的瓶颈。如果不能做到这一点,让它在运行时不锁定我们的其他线程会让它不那么烦人,因为我们不会在写入之外对该文件进行任何IO读取IO。感觉磁盘系统真的在妨碍我们。
更多信息:目标文件当前为16Gigs,但总是在变化(通常是向上)。我们在文件中的所有地方随机ping更新,它足够大,我们无法缓存整个文件。就碎片化而言,谁知道呢。这是一个经常更新的大型资产数据库,所以很可能。不确定如何使其不碎裂。再次,欢迎任何建议。
如果您在一开始就知道文件的最大大小,那么这看起来就像一个经典的内存映射文件应用程序
编辑。(至少在windows上)在映射内存映射文件时,不能更改该文件的大小。但是,您可以在打开文件和打开映射之间快速扩展它,只需将FilePointer()设置为某个大值,然后设置EndOfFile()。您可以在关闭映射后和关闭文件前对其进行类似的收缩。
您可以映射<4Gb视图(或多个视图)到一个大得多的文件中,文件系统缓存往往对内存映射文件更有效,因为它与操作系统用于加载程序的机制相同,因此经过了很好的调整。您可以让操作系统管理何时发生更新,也可以强制刷新某些内存范围。
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- CLANG格式在缺少libtinfo.so.5库中不起作用
- C++ 运行时链接器错误 (liblog4cpp.so.5) Eclipse
- 使 ld 忽略来自 /etc/ld.so.conf 的目录
- N-API include an .so or dll
- 加载共享库时C++错误:libopencv_ximgproc.so.4.4
- 如何从构建 libgpio.so 的生成文件构建libgpio.a
- 用于构建 cuda .so 文件(共享库)的生成文件
- 无法从 SO 文件调用 SO 文件的函数 - C++生成文件
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 在jupyter notebook和google colab中使用.so
- 如何在 C++ 的 .so 文件中包含库
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 如何使用QtCreator将应用程序与"libqsqlpsql.so"链接?
- 添加符号 libgtest.so 错误:命令行中缺少 DSO
- 为什么C++可执行文件在与较新的libstdc++.so链接时运行得更快?
- FileFlushBuffer() is so slow