Итак, я пробовал:
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 OS. Вот почему я часто использую boost. Я использую ab для тестирования. Я хочу получить в 2 или хотя бы 1,5 раза быстрее чтение и отправку файлов. Может быть, Boost::Iostream может мне как-то помочь?
Ответ 1 · рейтинг 2 · murrekatt
Не совсем уверен, что вам нужно, но чтобы ответить на ваш вопрос о быстром чтении файлов, вы можете сопоставить файл с памятью.
Таким образом, вы читаете из памяти, а не с диска. В зависимости от размера файла и тому подобного существуют разные подходы, которые могут быть интересны, например. отображать весь файл, если он небольшой, или отображать области файла по всему файлу по мере его обработки, если это большой файл.
В Boost.Interprocess вы можете прочитать больше об этом здесь.
Ответ 2 · John Zwinck
Если вы пытаетесь оптимизировать отправку файла с диска через сокет, проверьте sendfile(2), если вы используете Linux. Он специально разработан для этой цели.
Если вы хотите придерживаться чего-то более похожего на то, что у вас есть сейчас, но настроить его, я бы попробовал сделать буфер небольшим количеством мегабайт, а не просто 8 КБ.