Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 Kanal D va difuza serialul “...

Upgrade xiaomi mi11

securitate - acum se dau drept - ...

Farmacia Dr Max - Pareri / Sugest...
 

Viteza de citire fisier

- - - - -
  • Please log in to reply
9 replies to this topic

#1
horohoro

horohoro

    Junior Member

  • Grup: Members
  • Posts: 103
  • Înscris: 11.02.2010
Stie cineva vreo metoda in care sa pot mari viteza de citire a unui fisier larg? Ma aflu intr-o bucla in care adaug la fiecare executie a ei cate 20 bytes in fisier. Problema este ca cu cat fisierul este mai larg cu atat de greu citeste. Ma folosesc de API ca sa il citesc fiindca cu functia din VB imbatranesc pana imi returneaza textul.

Orice opinii, sugestii indiferent ca vin de la incepatori sunt apreciate ;. Respect toti talentatiiPosted Image

Edited by horohoro, 07 March 2013 - 04:06.


#2
JayBird

JayBird

    IT Professional

  • Grup: Senior Members
  • Posts: 2,511
  • Înscris: 15.09.2009
Citeste mai mult de 20 bytes deodata? Cativa MB ar fi un inceput, ca de aia ai RAM in calculator...

#3
horohoro

horohoro

    Junior Member

  • Grup: Members
  • Posts: 103
  • Înscris: 11.02.2010
Citesc tot fisierul ajunge pe la maxim 20MB apoi il folosesc sa caut un anumit text in el cu instrb()

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const FILE_BEGIN = 0
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const OPEN_EXISTING = 3
Const GENERIC_READ = &H80000000
Public Function CitesteFisier(strFisier As String) As String
	Dim handleFisier As Long, continutBytes() As Byte
	Dim dimFisier As Long, Result As Long
	handleFisier = CreateFile(strFisier, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
	dimFisier = GetFileSize(handleFisier, 0)
	SetFilePointer handleFisier, 0, 0, FILE_BEGIN
	ReDim continutBytes(1 To dimFisier) As Byte
	ReadFile handleFisier, continutBytes(1), UBound(continutBytes), Result, ByVal 0&
	CloseHandle handleFisier
	CitesteFisier = StrConv(continutBytes, vbUnicode)
	ReDim continutBytes(0) As Byte
End Function



#4
JayBird

JayBird

    IT Professional

  • Grup: Senior Members
  • Posts: 2,511
  • Înscris: 15.09.2009
Si unde e problema?

#5
horohoro

horohoro

    Junior Member

  • Grup: Members
  • Posts: 103
  • Înscris: 11.02.2010
Functia returneaza greu cand fisierul se mareste aici este problema
<=500kb | 5-10ms
<=5000kb | 100ms+
<=20000kb | 500ms+


Edited by horohoro, 08 March 2013 - 21:11.


#6
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Nu ti se pare normal sa dureze ceva cand citesti zeci de MB de pe HDD?

#7
horohoro

horohoro

    Junior Member

  • Grup: Members
  • Posts: 103
  • Înscris: 11.02.2010
Da mi se pare normal dar am intrebat daca este posibil sa maresc viteza de citire sau poate daca exista o alta alternativa de stocare/citire mai rapida.

#8
nexusm

nexusm

    Senior Member

  • Grup: Senior Members
  • Posts: 2,793
  • Înscris: 07.07.2011
"Viteza" in sine tine de partea de hard si numarul de procese al pc-ului. Daca nr. de procese ar fi constant, totul se rezuma la capacitatile componentelor hardware, unde, generic vorbind "marimea conteaza".
In cazul tau as incerca altceva.
Daca poti opri procesul de scriere a datelor, in sensul ca "generatorul de date" poate fi oprit (ex. daca citesc datele venite de la un termometru si le primesc din 10 in 10 ms. exagerez un pic aici, ei bine voi avea la dispozitie doar acele 10 ms pentru procesarea lor, salvare in fisier, cautare valori, decizii, executii, etc).
In acest caz voi spune ca "generatorul" nu poate fi oprit si trebuie sa ma incadrez in acest interval de timp.
Dar daca poate fi oprit, inchizi fisierul cu datele salvate si-l redeschizi pentru citire.
O alta varianta ar fi ca in momentul in care fisierul atinge anumite dimensiuni prestabilite (20Mb;40;60, etc) faci o copie a acestuia pe care o deschizi doar pentru citire(eventual cu SEEK).
Si ar mai fi o problema de logica...
Daca scrii datele in fisier in mod continuu, de ce cauti mereu (ca banuiesc ca vrei ceva anume) de la capat ???
Este clar ca nu ai gasit ceea ce vroiai.
De ce nu cauti de la ultima valoare verificata ?

Edited by nexusm, 10 March 2013 - 23:32.


#9
horohoro

horohoro

    Junior Member

  • Grup: Members
  • Posts: 103
  • Înscris: 11.02.2010
Datele pe care le scriu au ca identificatori numere aleatoare de aceea trebuie sa o iau de la inceput de fiecare data. Am incercat cu un dictionar de liste si se misca mai repede dar vreau sa testez si cu o baza de date mysql

Edited by horohoro, 11 March 2013 - 08:43.


#10
horohoro

horohoro

    Junior Member

  • Grup: Members
  • Posts: 103
  • Înscris: 11.02.2010

 horohoro, on 11 martie 2013 - 08:39, said:

Datele pe care le scriu au ca identificatori numere aleatoare de aceea trebuie sa o iau de la inceput de fiecare data. Am incercat cu un dictionar de liste si se misca mai repede dar vreau sa testez si cu o baza de date mysql

Problema rezolvata cu functia lui Merri
 http://www.vbforums.com/showthread.php?381822-Find-a-string-in-a-text-file-Fast....


Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate