Existuje rychlejší způsob načtení souboru - IO.StreamReader ?   otázka

VB.NET, Optimalizace, I/O operace

Mám problém z rychlostí - vb kod nize funguje jak má ale v textovém souboru mám 5000 řádků a než to všechno načte po jenom řádku - trvá to moc dlouho.

Je možnost tento proces nějak zrychlit? A druhá otázka je možno v tomto případě použít "ProgressBar" - nemám s ním žádné zkušenosti. Jsem začátečník.


        Dim soubor As New IO.StreamReader("cenik.txt")       
        Dim text_prvni_radek As String = soubor.ReadLine()          
        While Not soubor.EndOfStream        

            Dim text_radek As String = soubor.ReadLine()          
            Dim text_radek_array As String() = text_radek.Split(New Char() {";"c})
            Try
                oledbcon.Open()
                Dim strSQL As String = "INSERT INTO Polozky(Skupina,Objednaci_cislo,Nazev,Nakupni_cena,Doporucena_cena_bez_dph,Doporucena_cena) VALUES ('" & text_radek_array(0) & "','" & text_radek_array(1) & "','" & text_radek_array(2) & "'," & DesCislo(text_radek_array(3)) & "," & DesCislo(text_radek_array(4)) & "," & DesCislo(text_radek_array(5)) & ");"
                Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(strSQL, oledbcon)
                Dim objread As OleDb.OleDbDataReader
                objread = cmd.ExecuteReader
                objread.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                oledbcon.Close()
            End Try
        End While
        soubor.Close()

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Nic rychlejšího než streamy není. Pokud je to soubor ve formátu CSV tak by šlo ještě vyzkoušet ADO.NET, ale myslím, že by se to nezrychlilo. ProgressBar k ukazování průběhu načítání by použít šel, ale muselo by se zjistit, kolik dat z kolika je už načteno. Předem zjistit kolik řádků je v souboru aniž by se načetl není možné. Asi bych použil takový ten poletující styl ProgressBaru (Marquee), který pouze ukazuje, že se něco děje + informaci o tom, kolik řádků už bylo načteno.

nahlásit spamnahlásit spam 4 / 4 odpovědětodpovědět

A co zjistit počet bytů souboru a pak počítat kolik se už jich načetlo ?

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

To má zádrhel v tom, že nevíte, v jakém je textový soubor kódování. Například Unicode kódování má totiž dvoubajtové znaky a myslím že i nějakou minimální hlavičku na začátku. To je pro vás při práci se Stringem samozřejmě naprosto transparentní. Takže například "Ondřej" v ASCII kódování bude mít skutečně 6 bajtů, kdežto "Ondřej" v Unicode bude sice hlásit délku 6, ale ve skutečnosti bude zabírat 14 bajtů.

nahlásit spamnahlásit spam 4 / 4 odpovědětodpovědět

Co se týče kódování záleží zde jde o UTF-7, UTF-8,UTF-16 nebo UTF-32. Přičemž například UTF-8 má proměnou délku znaků.

Procenta načtení získate z BaseStream:

soubor.BaseStream.Position / soubor.BaseStream.Length

<0;1>

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

"Co se týče kódování záleží zde jde o UTF-7, UTF-8,UTF-16 nebo UTF-32. Přičemž například UTF-8 má proměnou délku znaků.

Procenta načtení získate z BaseStream:

soubor.BaseStream.Position / soubor.BaseStream.Length

<0;1>"

Nechápu, proč je příspěvek tak špatně hodnocenej. Mě osobně pomohl dost a je to jednoduchý. Ode mne palec nahoru. :)

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

No, já jsem amatér, který tady tahá rozumy. Tohle jsem ale obešel tím, že si ručně napíšu na prvním řádku v TXT souboru kolik řádků tam je a načtu počet řádků jako první položku. Pak s tím souborem teprve pracuju dál. :)

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback