Gå til innhold

Gjest Sletet+adslkfjv

Anbefalte innlegg

Gjest Sletet+adslkfjv

har en bok her, som heter .net framework 2.0 application developement fundation, regnet med det var en bok som innehold info som forklarte de beste metodene. men det står ihvertfall for å søke i store filer så lønner det seg å bruke metoden med readline og sjekke hver linje for teksten du vil evt. vil finne.

while (!reader.EndOfStream)
			{
				String linje = reader.ReadLine();
				if(linje.Contains("butes=16384,FileSize=89846,PerTick=32768,,VerifyMedia"))
					break;
				txt1.AppendText(linje);
			}
			reader.Close();

 

jeg valgt en ca 8,5mb stor fil, og den tok litt tid å åpne i notepad, så synes den passet bra til eksempelet her.

når jeg kjører koden over så brukte den 69507 ms. det er ganske tregt....

 

kjører man derimot:

String location = @"D:\";
FileStream file = File.OpenRead(location + @"log.txt");
			StreamReader reader = new StreamReader(file);
			txt1.AppendText(reader.ReadToEnd());
			reader.Close();
			file.Close();
			if (txt1.Text.Contains("butes=16384,FileSize=89846,PerTick=32768,,VerifyMedia"))
				statuslbl.Text = "text found :";

den tar bare 1495 ms for å finne den samme teksten. det vil jeg si er ganske stor forskjell. så jeg forstår ikke helt hva forfatteren mener med at den første koden jeg skriver her skal være så bra med å søke i store filer...

 

håper bare resten av boka ikke inneholder flere "dårlige" eksempler....

 

jeg har forsåhvitt også et spørsmål,jeg trenger å lese store log filer over nettverk,og jeg kan bare lese dem fra "share/mappet" område, hva vil være beste måte å lese de på?

Lenke til kommentar
Videoannonse
Annonse

Med stor tekstfil tenker jeg med engang betydelig større en 8 MB.. men men...

 

For å lese over nettverk er den enkleste måten å lese filen med

 

string file_text = System.IO.File.ReadAllText("\\Datamaskinnanv\delnavn\fil.txt");

Tror det skal fungere.

 

aprikos ser jeg ikke poenget med Contains funksjonen din... men det er en annen sak.

 

while((line = reader.ReadLine()) != null)
 if(line.Contains("hei"))
break;
reader.Close();

 

Vær også obs på at dersom du lukker en streamreader/writer, så lukker du også automatisk streamen som ligger under.

Lenke til kommentar
Gjest Sletet+adslkfjv

joda,men samme om den er 8mb eller 100mb så vil den siste metoden jeg skrev være raskere.

 

jeg er ikke så sikke på at den her fungere: string file_text = System.IO.File.ReadAllText("\\Datamaskinnanv\delnavn\fil.txt");

men ska teste den....

 

poenget med contain funksjonen var at i beskrivelsen sto at den første metoden skulle være veldig bra å bruke når man skulle finne tekst i en stor fil.

 

jepp,vet at den lukker automatisk streamer under, men det var ikke noe case,siden disse metodene ikke ble kjørt samtidig.

Lenke til kommentar

Kodesnuttene dine gjør jo to (helt) forskjellige ting, så derfor er det ikke noe poeng å sammenligne ytelse.

Jeg skal vedde på at det som gjør at den første går treigt er ikke selve lesingen, men det at du putter teksten inn i en teksboks som må oppdatere minnet/skjermen hele tiden.

Lenke til kommentar
Gjest Sletet+adslkfjv

begge metodene putter samme tekst inn i samme tkstboks. så jeg vil si at det er ikke 2 helt forskjellige ting.

 

eh,hmm. droppa å putte teksten inn i tekstboxen, og lagra i en string og da ble faktisk den første metoden den kjappeste. my mistake :(

men likevel, skal man ha ting i gui så vil den siste være kjappest ;)

Endret av Sletet+adslkfjv
Lenke til kommentar
begge metodene putter samme tekst inn i samme tkstboks. så jeg vil si at det er ikke 2 helt forskjellige ting.

 

eh,hmm. droppa å putte teksten inn i tekstboxen, og lagra i en string og da ble faktisk den første metoden den kjappeste. my mistake :(

men likevel, skal man ha ting i gui så vil den siste være kjappest ;)

 

Nei, den første vil ALLTID være kjappest måte å lese filen på og samtidig sjekke innhold. Problemet er ikke i innlesingen. Problemet er at du sjekker string'en på forskjellige måter OG at du legger til teksten i en string og/eller GUI kontroll på forskjellige måter.

 

Les om StringBuilder. Første metoden + StringBuilder + oppdatere textboksen 1 gang (som du gjør i kode 2) vil være raskest.

Endret av jorn79
Lenke til kommentar
begge metodene putter samme tekst inn i samme tkstboks. så jeg vil si at det er ikke 2 helt forskjellige ting.

 

eh,hmm. droppa å putte teksten inn i tekstboxen, og lagra i en string og da ble faktisk den første metoden den kjappeste. my mistake :(

men likevel, skal man ha ting i gui så vil den siste være kjappest ;)

Hvorfor skal du vise ting i gui som skifter så raskt at du ikke har sjanse til å se hva som står der?

Lenke til kommentar
Gjest Sletet+adslkfjv

ja sant det jorn79, jeg så det ikke til å begynne med. takk for oppklaringen.

 

fint å vise i gui, men som jorn79 sier så er det best å lese hele greia i en stringbuider,og så putte i f.eks en textbox.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...