История изменений
Исправление asaw, (текущая версия) :
А какая альтернатива?
Должен заметить, что в моем случае я столкнулся с проблемами в основном под виндой. Решение было такое:
FILE* stream = _wfsopen(path.c_str(), L"rbS", _SH_DENYWR);
if (stream != nullptr) {
std::ifstream newIfs(stream);
if (newIfs.good()) {
success = true;
ifs.swap(newIfs);
}
else
fclose(stream);
}
То есть это stdio вместе с iostreams. И вот это вот позволило поднять производительность минимум в 30 раз - далее уже сеть стала узким местом. Сами по себе iostreams тормозом не являются.
P.S. В данном конкретном примере у использования stdio и iostreams есть другой минус - в оффтопике есть жесткий лимит на число одновременно открытых файловых дескрипторов из stdio и он смехотворно низок - всего 2048 (по умолчанию и вовсе 512). Причем, нужно помнить, что сокеты используют те же дескрипторы. То есть решение всё равно получается ограниченным даже если бы в iostreams был бы нужный флажок. А в Win32 API такого ограничения нет. Правильное кроссплатформенное решение должно учитывать и такие особенности.
Исходная версия asaw, :
А какая альтернатива?
Должен заметить, что в моем случае я столкнулся с проблемами в основном под виндой. Решение было такое:
c++
FILE* stream = _wfsopen(path.c_str(), L"rbS", _SH_DENYWR); if (stream != nullptr) { std::ifstream newIfs(stream); if (newIfs.good()) { success = true; ifs.swap(newIfs); } else fclose(stream); }
То есть это stdio вместе с iostreams. И вот это вот позволило поднять производительность минимум в 30 раз - далее уже сеть стала узким местом. Сами по себе iostreams тормозом не являются.
P.S. В данном конкретном примере у использования stdio и iostreams есть другой минус - в оффтопике есть жесткий лимит на число одновременно открытых файловых дескрипторов из stdio и он смехотворно низок - всего 2048 (по умолчанию и вовсе 512). Причем, нужно помнить, что сокеты используют те же дескрипторы. То есть решение всё равно получается ограниченным даже если бы в iostreams был бы нужный флажок. А в Win32 API такого ограничения нет. Правильное кроссплатформенное решение должно учитывать и такие особенности.