Biblioteka fstream i wielkość plików
Ostatnio zmodyfikowano 2017-02-20 22:19
maly7 |
» 2017-02-19 01:14:07 Byłem w błędzie. Przeprowadziłem proste testy. Tego się nie spodziewałem :D
Zapisywałem 1024*1024*128 razy int 5. Plik zapisywany przez operator << (134MB, 4.43s) zapisywał się ponad 1.5 razy dłużej jak plik zapisywany przez plik.write (536MB, 2.5s). |
|
pekfos |
» 2017-02-19 01:42:36 A co dokładnie miało pokazać te porównanie? Kod też by nie zawadził, na poparcie tego, co tam robiłeś. |
|
maly7 |
» 2017-02-19 02:23:13 Prędzej pisałem, że zapis przez operator << powinien być szybszy od metody plik.write ponieważ zapisuje mniej bajtów. Teraz chciałem napisać, że to nie była racja :D #include <iostream> #include <fstream> #include <ctime>
using namespace std;
int main() { int zm = 5; fstream plik; plik.open( "test.txt", fstream::out ); cout << "Start <<\n"; clock_t start = clock(); for( int i = 0; i < 1024; i++ ) { for( int j = 0; j < 1024; j++ ) { for( int k = 0; k < 128; k++ ) plik << zm; } } clock_t koniec_t = clock() - start; cout << "Koniec <<\n"; plik.close(); plik.open( "test2.txt", fstream::out ); cout << "Start met\n"; start = clock(); for( int i = 0; i < 1024; i++ ) { for( int j = 0; j < 1024; j++ ) { for( int k = 0; k < 128; k++ ) plik.write(( char * ) & zm, sizeof zm ); } } clock_t koniec_b = clock() - start; cout << "Koniec met\n"; plik.close(); cout << "Operator <<: " <<( double ) koniec_t / CLOCKS_PER_SEC << "s\n"; cout << "Metoda write: " <<( double ) koniec_b / CLOCKS_PER_SEC << "s\n"; return 0; }
@EDIT Żeby nie dodawać kolejnego posta :D Ja również wykonywałem te operacje na dysku SSD. |
|
Nazgul |
» 2017-02-19 02:56:13 Z tego co się orientuję to na dyskach SSD nie powinno być różnicy(to co mówił michal11), problem dotyczy HDD, gdzie masz fizyczne ograniczenia(głowica musi się ustawić itd.) przez co zapisywanie całym blokiem danych jest znacznie bardziej opłacalne, bo głowica się ustawia tylko raz, a nie n razy;) |
|
Saran |
» 2017-02-19 13:12:06 Co do dysków SSD: Operator << : 49.537s - 131 MB Metoda write: 30.507s - 524 MB
|
|
Nazgul |
» 2017-02-19 19:22:52 mm a to ciekawe.. możliwe, jakiś protokół ogranicza przesył, albo że dane mają dodatkowe informacje o miejscu bazowym i docelowym..
|
|
Saran |
» 2017-02-19 19:59:56 Co ciekawe, rozmiar plików różni się od wyników malego nawet o 12 MB w drugim przypadku. Czym to może być spowodowane, wersją OS?
Edit: Niech ktoś wykona kod na HDD, jeśli może. I zapoda wyniki. |
|
Monika90 |
» 2017-02-19 20:29:34 Co ciekawe, rozmiar plików różni się od wyników malego nawet o 12 MB
|
Bo w jego przypadku mega to 1000000, a u ciebie mega to 1000*1024 |
|
1 « 2 » 3 4 |