c++ - boost asio 套接字 : fastest way to read file from hard drive?

标签 c++ file sockets boost boost-asio

所以我试过:

int buff_length = 8192;
ifstream stream;
char* buffer = new char[buff_length];

stream.open( path.string().c_str(), ios::binary );

boost::system::error_code ignored_error;

while (stream)
{
    stream.read(buffer, buff_length);
    boost::asio::write(*socket, boost::asio::buffer(buffer, stream.gcount()),
                            boost::asio::transfer_all(), ignored_error);  
}

我想知道你是怎么做到的 - 如何做得更快?

我的应用程序可以在 Windows、Linux 和 Mac 操作系统上运行。这就是我经常使用 boost 的原因。我使用 ab 进行测试。我希望读取和发送文件的速度 boost 2 倍或至少 1.5 倍。可能是 Boost::Iostream 可以帮助我吗?

最佳答案

不完全确定您在寻找什么,但要回答有关快速读取文件的问题,您可以将文件映射到内存

这样你就可以从内存中读取而不是从磁盘中读取。根据文件大小等,有不同的方法可能很有趣,例如如果文件很小,则映射整个文件;如果文件很大,则在处理文件时映射整个文件的区域。

在 Boost.Interprocess 中,您可以阅读更多关于此的信息 here .

关于c++ - boost asio 套接字 : fastest way to read file from hard drive?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7140626/

相关文章:

c++ - 如何创建仅包含主文件和模板 header 的 makefile (C++)

c++ - 代码不会在 g++ 中编译,而在 clang++ 中会编译

python - (Python) 尝试一次扫描一个 IP 地址的端口范围时出现错误

c - 收到 1 或 2 个后,从客户端读取数据包停止

java - 将 Hazelcast 配置导出到文件

c - unix套接字上的连接数

c++ - 如何为 gtkmm 应用程序创建 CMakeLists.txt?

reference_wrapper 容器的 c++ 模板特化

java - Html2Pdf 转换器禁用文本选择

file - 缓冲文件(用于更快的磁盘访问)