Avatar billede lasserasch Juniormester
30. januar 2007 - 15:49 Der er 4 kommentarer og
1 løsning

Mit program sluger alt min hukommelse.

Hejsa.

Jeg har en lille applikation, som består af en form1 og en class jeg har kaldt functions.

På form1 ligger en tekstbox med multilines...

Når jeg trykker på en knap på form1, så opretter jeg en reference til functions classen. Her udfører jeg et stykke kode som synkroniserer data fra 2 forskellige databaser.

Programmet virker kanon godt.

Mit problem opstår når jeg løbende gerne vil have min sync kode til at skrive tekst i textboksen på form1. Jeg har en reference til form1 fra min functionsclass, som hedder F1.

Når jeg fra functions classen skriver til textbox1 på F1 vha. F1.Textbox1.Text  = F1.Textbox1.Text + " bla bla bla";

så sluger mit program lige pludselig vildt meget hukommelse. Jeg skal køre ca. 1500 rækker af data igennem. Men skriver jeg til tekstboksen på form1, så når jeg kun til omkring 250 - 350 stykker, så har den brugt hele min computers hukommelse.

Slår jeg denne skrivning fra igen, så kører den alle 1500 rækker data igennem på 10 - 15 sek uden at bruge specielt meget RAM.

Jeg ved godt at jeg kan rette det, ved bare at skrive data til en variabel på functions formen mens jeg looper, og så skrive denne string ind i F1.Textbox1.Text når jeg er helt færdig med mine 1500 loops....

Men hvorfor sker det? Det forstår jeg ikke helt! Jeg opretter jo ikke referencen til form1 mere end en gang!

Håber nogle forstår hvad jeg mener og kan kaste lidt lys på sagen!



/Lasse
Avatar billede Spotgun Seniormester
30. januar 2007 - 19:47 #1
Prøv med F1.Textbox1.AppendText("bla bla bla")

Jeg kunne forestille mig at al hukommelsen bliver brugt, da den måde du tilføjer til din textbox nu, laver en ny streng i hukommelsen for hver linie du tilføjer.
Avatar billede skov_p Praktikant
30. januar 2007 - 21:04 #2
Gem din tekst i en StringBuilder
StringBuilder text = new StringBuilder();
Den har en text.Append("Bla..."); metode og du kan evt. sætte Environment.NewLine efter for at få det som separate linier.
Når du er færdig med at samle data bruger du F1.Textbox1.Text = text.ToString();
Avatar billede lasserasch Juniormester
31. januar 2007 - 08:20 #3
Hej gutter.

Det var løsningen på mit problem. Så lærte jeg også noget nyt idag...
Brugte skov_p's løsning, med det er jo næsten samme løsning som spotgun kom med!

Så hvis i vil dele mine ydmyge 30 points så kom hid med et svar!

Takker for hjælpen!

/Lasse
Avatar billede Spotgun Seniormester
31. januar 2007 - 08:59 #4
Bare stik pointene til Skov_P...
Avatar billede skov_p Praktikant
31. januar 2007 - 10:01 #5
Det er altid en god ide at gemme data i en variable og vente med at opdatere GUI'en til man er færdig med at behandle data.
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