_13th_Dragon napisał(a)
O testach z konsolą zapomnij bo wszystko zależy od tego jaki masz terminal.
Poza tym użytkownik i tak nie zdąży przetrawić tego w tym tempie.
Ehm, jakie testy z konsolą? ^_-
Testy, które wkleiłem nie dotykają w ogóle konsoli - w pierwszym przypadku, tak jak napisałem, stdout jest przekierowany do /dev/null.
W ogóle mam wrażenie, że nie czytasz od A do Z moich postów, tylko rzucasz na nie okiem i biegniesz odpowiedzieć.
Np. dwa posty temu napisałem:
Gynvael Coldwind napisał(a)
Co do flushowania, to jak wiesz close() i tak flushuje, więc w tym konkretnym wypadku zrobienie go przed samym close() jest niepotrzebne.
Oczywiście nic to też nie zepsuje, ponieważ wtedy flush wykonywany w ramach close jest bardzo szybkim no-opem.
Post temu napisałem:
Gynvael Coldwind napisał(a)
I, że się powtórzę, nadal uważam, że w przypadku tego topicu jest to zupełnie bez znaczenia, bo tam flush jest w ilości: jeden, bezpośrednio przed close.
Po czym w swojej odpowiedzi znowu adresujesz przypadek jednego flusha, o którym ja zupełnie nie wspominam i o nim nie piszę.
_13th_Dragon napisał(a)
Natomiast co do plików, widzę że maksymalna różnica jest prawie 7 sek na 10 mln endl/'\n' podzielmy to, mamy 7E-7 sek, czyli 0.7 mikrosekundy oszczędności?
Przypominam autor zapisuje jeden wiersz.
Przyznaję, że zastanawiałem się post wcześniej, czy chodzi Ci o ten konkretny przypadek jednego flusha (mimo, iż napisałem, że w tym wypadku dyskusja jest nieistotna), czy o mój komentarz, że zbyt częste flushowanie (tj. "np. gdyby zapisywać 100 linii do pliku") niepotrzebnie spowolni działanie (ofc 100 w tym wypadku to dość mało i raczej chodziło mi o sensowną większą ilość). Założyłem, że jednak przeczytałeś mój post i pytasz o to drugie - stąd moje testy.
Napisz więc plz z którymi fragmentami moich dotychczasowych wypowiedzi się zgadzasz, a z którymi nie i dlaczego - wtedy będzie jasne o czym dyskutujemy i będzie sens kontynuować.
Ad "bo podając testy tylko pod linuksa podajesz tylko 2% prawdy"
To jest 100% prawdy dla GNU/Linux, a nie 2% prawdy ;)
Co więcej, GNU/Linux jest na przynajmniej 30% serwerów.
Natomiast z ciekawości i tak zrobiłem testy na Windowsie:
#include <iostream>
#include <fstream>
#include <time.h>
int main() {
clock_t bench = clock();
std::ofstream f("/tmp/test");
for (int i = 0; i < 10 * 1000 * 1000; ++i) {
f << "Jakis tam losowy tekst udajacy prawdziwe dane w niewielkiej "
"ilosci, ale takiej, ktora przynajmniej udaje jakies logi."
#ifdef NOFLUSH
<< '\n';
#else
<< std::endl;
#endif
}
bench = clock() - bench;
std::cerr << "Bench: " << double(bench) / 1000. << "\n";
}
clock() ma rozdzielczość 1ms i update time 1ms na Windows 7 (vide http://gynvael.coldwind.pl/n/time_functions) więc wystarczy.
Wyniki:
gynvael:haven-windows> testf_flush
Bench: 24.952
gynvael:haven-windows> testf_flush
Bench: 24.937
gynvael:haven-windows> testf_flush
Bench: 24.991
gynvael:haven-windows> testf_noflush
Bench: 12.224
gynvael:haven-windows> testf_noflush
Bench: 12.382
gynvael:haven-windows> testf_noflush
Bench: 12.288
Czyli jest jeszcze gorzej, q.e.d. ;)
Z ciekawostek dodam, że >nul jest jakoś dziwnie na Windowsie zaimplementowane i w jego przypadku wyniki są w zasadzie identyczne. Ciekawe, ale nieistotne dla dyskusji ;)