Kezdőoldal » Számítástechnika » Programozás » Ha fájlt olvasok be és egy 1...

Ha fájlt olvasok be és egy 1 GB-os pufferbe olvasok be, ettől kiakadhat a program? (Pascal)

Figyelt kérdés

Mármint attól, hogy ilyen nagy a puffer, az OS nem úgy adja neki a memóriát ahogy a program szeretné (ehhez nem értek), nem ad ki annyit, esetleg nincs annyi RAM az adott gépben... Nem lehet azt megoldani, hogy annyi RAM-ot foglaljon le (vagy annak a felét) amennyi adott gépben van?

Ez a teszt program amelyben egy 1 GB-s tömböt hoztam létre, nem akad ki elvileg...


Bár a gép nagyon belassul, az biztos, pedig 3 GB RAM van benne...

Meg lehet oldani a feladatot úgy, hogy dinamikus tömb és biztonságosan, automatikusan annyit foglaljon le, amit biztos hogy az OS aktuálisan ki tud neki adni?


program fajlmasol;

const

meret = 1073741824;

var

inf, outf : File of Byte;

adat : Array[1..meret] of Byte;

NumRead, NumWritten:Longint;

Begin

Assign(inf,ParamStr(1));

Reset(Inf);

Assign(outf,Paramstr(2));

Rewrite(outf);

Repeat

BlockRead(inf,adat,Sizeof(adat),NumRead);

BlockWrite(outf,adat,NumRead,NumWritten);

Until(NumRead=0);

Close(inf);

Close(outf);

End.



2015. jan. 28. 17:55
1 2
 11/12 anonim ***** válasza:
54%

Egyáltalán nem mindegy a blokkméret. Ha helyesen lövöd be, akkor 3-4x sebességnövekedés simán el lehet érni.


Az optimális blokkméret viszont sok mindennek a függvénye: merevlemez, fájlméret, partíció, operációs rendszer, töredezettség méretéke, cache mérete, stb.


Legegyszerűbb ha leteszteled például a dd paranccsal. 4MB-8MB körülire szokták belőni a blokkméretet, körülbelül ott van az optimum, modernebb rendszereknél nagyobb is lehet. Írtam gyorsan egy Python programot hogy megnézzem windowson mennyi az optimális blokkméret, 500MB fájl mellett 16MB blokkméret volt a nyerő, 100-500MB közötti fájloknál 4MB körül, és 100MB alatti fájloknál ~1MB (még kilóbájtos tartományban is).


Minden esetben nagyobb blokkméret csak kis sebességcsökkenést eredményezett ha nem vittem túlzásba, viszont 4KB-os blokkméret amit fentebb többen is ajánlottak 4-5x volt lassabb mint az optimális. (1KB-nál ez az arány pedig még nagyobb volt).

2015. jan. 30. 01:51
Hasznos számodra ez a válasz?
 12/12 A kérdező kommentje:

Köszönöm a válaszokat, le fogom tesztelni a sebességet.

8 MB cache-vel rendelkezik a merevlemez és az a tervzem, hogy 64 KB clusterméretre formázom, hogy jobb legyen a teljesítmény, mintha 4K lenne csak.

A gyártó oldalán ezt is írják, ezért is vagyok bizonytalan hogy mire is célszerű állítani a puffert:

The 500GB Scorpio Blue’s straight line performance with sequential 2MB block transfers leads in its class, with transfer speeds of 117 MB/s reading and

writing. Note the drop-off in speed between the 500GB Scorpio Blue and its older 640GB sibling.


Nekem az 500 GB-s van.

2015. jan. 31. 09:03
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!