Avatar billede ha9953 Nybegynder
21. juli 2004 - 17:55 Der er 11 kommentarer og
1 løsning

Langsom ved inlæsning af xml i dataset

Jeg har en xmlfil med omkring 6000 poster (afstemning). Jeg har lagt mærke til at siden bliver langsommere og langsommere efterhånden som antallet af poster stiger.

Jeg vil høre om der er en hurtigere måde at læses et xml dokument end nedenstående?

    public function stemtotal(stemtid as string) as integer
        Dim filnavn as string
        Dim udtryk as string

        try
            filnavn = ConfigurationSettings.AppSettings("server") & ConfigurationSettings.AppSettings("write") & "afstemninggivet/" & stemtid & ".xml"
        catch t as exception
            return 0
            exit function   
        end try
           
        dim filInfo as new fileinfo(filnavn)
        if NOT filinfo.exists() then
            return 0
            exit function   
        end if

        Dim ds as new DataSet()
        Dim Dt As DataTable
        Dim Dr As DataRow()       

        try
            ds.ReadXml(filnavn)
        catch t as exception
            return 0
            exit function   
        end try

        Dt = ds.Tables(0)
        Dr = Dt.Select("afid<>'0'")   
        return cint(Dr.length)
    end function
Avatar billede nielsbrinch Nybegynder
21. juli 2004 - 18:10 #1
Det er hurtigere at bruge en XmlReader - men den er bare meget mere besværlig også ...

Hvis det ikke er selve indlæsningen der er problemet, kan du overveje at indlæse i et XmlDocument i stedet og søge med XPath, det er måske hurtigere.
Avatar billede repsak Nybegynder
21. juli 2004 - 18:58 #2
hmmm opretter du en ny xml post hver gang en person stemmer???? Så er det da klart at det tager tid. Her er et udsnit af en quickpoll jeg har lavet for noget tid siden:

XML:
<?xml version="1.0" standalone="yes"?>
<poll>
  <choice>
    <name>Valg 1</name>
    <votes>7</votes>
  </choice>
  <choice>
    <name>Valg 2</name>
    <votes>2</votes>
  </choice>
...

Eller har jeg misforstået dit problem? :-)
Avatar billede guidmaster Nybegynder
21. juli 2004 - 21:27 #3
En mulighed du kraftigt bør overveje er at gemme xml dokumentet i cachen og lægge en dependency på. På den måde vil du kunne skulle læse dit xml dokument når der er sket ændringer, og altså ikke hver gang siden skal vises.
Et godt sted at starte: http://aspnet.4guysfromrolla.com/articles/121802-1.aspx
Avatar billede nielsbrinch Nybegynder
21. juli 2004 - 21:29 #4
eller!

lidt afhængigt af hvordan du tilgår data, kan du overveje at dele det ud på flere forskellige mindre filer.
Avatar billede guidmaster Nybegynder
21. juli 2004 - 21:31 #5
Under alle omstændigheder vil det være rigtig god idé at cache dem og dermed slippe for at indlæse dem hver gang ;)
Avatar billede ha9953 Nybegynder
22. juli 2004 - 07:31 #6
Ok - kigger lige på det senere - grunden til at jeg opretter en post for hver gang er at jeg tjekker folk på deres ipadresse - skal jo ikke kunne stemme mere end en gang - har haft problemer med tæppebomning af afstemninger hvor en person stemte 3000 gange :-) - men kigger lige på ovenstående senere

Lige i samme forbindelse - hvordan opdaterer man en post i en xmlfil?
Avatar billede repsak Nybegynder
22. juli 2004 - 09:12 #7
hvis du logger ip-nummeret er det så ikke væsentlig hurtigere at konvertere til en DB? Det giver ikke god performence at læse hele XML op i DataSet - specielt ikke når det er så mange poster.

Desuden er ip-log ikke så fedt for folk som sidder bag en proxy. Så er der kun én i et helt firma som må stemme ;-)
Avatar billede nielsbrinch Nybegynder
22. juli 2004 - 17:43 #8
repsak, det er jo den eneste mulighed. Med cookies kan ham det ene kvaj jo bare slå cookies fra. Nej så er det mere fristende at gemme ip'erne i serverens hukommelse. Så glemmer den dem godt nok hver gang serveren genstartes, men det er jo i de fleste tilfælde yderst sjældent det sker.

Sikke jeg snakker.
Avatar billede repsak Nybegynder
05. august 2004 - 16:10 #9
hehe jeg vil under ingen omstændigheder anbefale brug af XML når det handler om så mange data der skal indlæses ofte. For mig at se er der ingen fordele. Men hvis I har nogle grunde så er jeg meget interesseret :-)
Avatar billede ha9953 Nybegynder
23. august 2004 - 10:43 #10
Guidmaster kan du ikke lige smide et svar - havde fuldstændig glemt dette soørgsmål
Avatar billede ha9953 Nybegynder
26. september 2004 - 15:02 #11
Guidmaster kan du ikke lige smide et svar - havde fuldstændig glemt dette spørgsmål
Avatar billede guidmaster Nybegynder
26. september 2004 - 15:29 #12
Kaster et afsted....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester