Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Biblioteka fstream i wielkość plików

Ostatnio zmodyfikowano 2017-02-20 22:19
Autor Wiadomość
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).
P-157992
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ś.
P-157996
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

C/C++
#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.
P-158000
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;)
P-158001
Saran
» 2017-02-19 13:12:06
Co do dysków SSD:
Operator << : 49.537s - 131 MB
Metoda write: 30.507s - 524 MB
P-158007
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..
P-158019
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.
P-158020
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
P-158022
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona