Gjest Sletet+adslkfjv Skrevet 22. november 2007 Del Skrevet 22. november 2007 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
GeirGrusom Skrevet 22. november 2007 Del Skrevet 22. november 2007 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 Skrevet 22. november 2007 Del Skrevet 22. november 2007 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
j000rn Skrevet 22. november 2007 Del Skrevet 22. november 2007 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 Skrevet 22. november 2007 Del Skrevet 22. november 2007 (endret) 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 22. november 2007 av Sletet+adslkfjv Lenke til kommentar
j000rn Skrevet 22. november 2007 Del Skrevet 22. november 2007 (endret) 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 22. november 2007 av jorn79 Lenke til kommentar
crysys Skrevet 23. november 2007 Del Skrevet 23. november 2007 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 Skrevet 23. november 2007 Del Skrevet 23. november 2007 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå