spa*_*ate 5 c c++ file optical-drive
从硬盘驱动器读取文件时,mmap 通常被认为是快速将数据读取到内存的好方法。使用光驱时,访问需要更多时间,并且您需要担心更高的延迟。您使用什么方法/抽象来隐藏/消除尽可能多的延迟和/或光驱的总体加载时间?
没有真正的抽象可以使用。光驱具有非常具体的特性,必须对其进行优化才能获得最佳性能。
一些技巧:
光驱的最大杀手是寻道时间。尽可能确保您正在读取的所有文件在光盘上都是连续的,并且尽可能紧密地排列。如果你必须寻找,那么就朝一个方向寻找,并且尽可能不频繁地寻找。
异步读取还可以极大地提高性能。如果您需要加载和处理文件 A、B 和 C,那么在处理 A 之前您应该开始读取文件 B,在处理 B 时您应该读取文件 C,依此类推。
一般来说,一次可以读取的数据越多越好,例如避免大量的小读取()。在读取大量数据时,您只能获得光盘的理论吞吐量。某些操作系统的/驱动程序将通过缓存扇区来最大程度地减少读取大量小文件的损失,有些则不会。
在某些仅缓存部分目录的文件系统/操作系统上,进行大量的存在(文件名)检查也可能是有害的。
在我们的应用程序中,我们通常将文件打包到一个或多个“集中”文件中,并根据它们的访问顺序对它们进行排序。某些文件(和目录)在内存中解压缩之前会被压缩并完整读取。如果您的目录包含大量小文件(例如 XML 或脚本),这可能是一个胜利。
基本上进行了大量的基准测试和调整:)