Avatar billede kmn_dk Nybegynder
18. juli 2006 - 14:59 Der er 10 kommentarer og
1 løsning

using, dispose og garbage collector

Hej med jer.

Jeg ved ikke rigtigt om de her spørgsmål hører til under asp.net eller c#. men her er de:

1a. Jeg har en web page som kalder 6 forskellige web service, Alle web service understøtter Dispose() metoden. Alle kaldene til web service sker under page_load. Hvis ikke man kalder Dispose() vil garbage collectoren så kører når page_load er gået out of scope ?

1b. Hvis man ikke kalder Dispose() vil garbage colleteren overhoved collecte de resource ?

2. Er det gennerelt at når man arbejder med web services i .Net at man skal kalde Dispose() ?

3. er denne C# syntax ok :

using (R r1 = new R())
using (L l1 = new L())
using (P p1 = new P())
{
}

eller skal de forskellige using statements nestes under hinanden ?

Venlig hilsen
Kristian
Avatar billede arne_v Ekspert
18. juli 2006 - 15:08 #1
re 1)

GC vil koere naar der ikke er nogen referencer til de objekter *og* .NET runtime
synes at den mangler memory

derfor kan der gaa lang tid

re 2)

tror jeg ikke

fordi Dispose er mest rtelevant for unmanaged ressourcer og jeg den eneste
unmanaged ressource her maa vaere en socket og den maa stub koden vel faa
closet

re 3)

jeg mener at du skal have { } omkring alle 3 blokke
Avatar billede hmortensen Nybegynder
18. juli 2006 - 15:38 #2
using (R r1 = new R(), L l1 = new L(), P p1 = new P())
{
}
Avatar billede bennytordrup Nybegynder
18. juli 2006 - 19:22 #3
re 1)

Det kommer også an på hvor, din erklæring af web servicen er. Hvis den ligger i Page_Load, *kan* du risikere, at den bliver garbage collected umiddelbart efter page_load er afsluttet.

re 2)

Så vidt jeg husker fra "Implementing the IDisposable pattern", anbefales det altid at kalde Dispose, hvis objektet har en sådan metode.

re 3)

{} er ikke nødvendige om alle blokke - forudsat, at al kode inden for disse using ligger inden for den inderste using.
AFAIR kræver en sammensmeltning af using som hmortensen angiver, at det skal være af samme type, men jeg er ikke sikker.
Avatar billede hmortensen Nybegynder
18. juli 2006 - 19:30 #4
Eksemplet her er lavet med samme type, men kan ikke se noget om at det skal være samme type.
http://msdn2.microsoft.com/en-us/library/yh598w02.aspx
Avatar billede bennytordrup Nybegynder
18. juli 2006 - 21:52 #5
hmortensen >>

Eksemplet compiler fint med samme type. Hvis du benytter andre typer, compiles ikke.

Dette stykke kode giver fejl:

using (Font f1 = new Font(this.Font, FontStyle.Bold),
    DataSet ds1 = new DataSet()) {
    // Do something
}


Fejlen er:

Cannot use more than one type in a for, using, fixed, or declaration statement
Avatar billede hmortensen Nybegynder
18. juli 2006 - 22:42 #6
Ok, havde ikke afprøvet det :)
Avatar billede kmn_dk Nybegynder
19. juli 2006 - 08:40 #7
tak for svarene det gav lidt mere klarhed

Hilsen
Kristian
Avatar billede bennytordrup Nybegynder
19. juli 2006 - 13:12 #8
Hmmm. Hvem gav dig det svar, der gav dig den klarhed? Du har svaret selv og taget alle points selv - det er IMO i strid med reglerne!
Avatar billede kmn_dk Nybegynder
25. juli 2006 - 12:55 #9
øhm det var ikke planen bennytordrup og arne v skulle have haft point.
Avatar billede bennytordrup Nybegynder
25. juli 2006 - 13:02 #10
:-)

Opret et nyt spørgsmål med reference til dette og med samme pointtal. Der lægger vi så vores svar.
Avatar billede kmn_dk Nybegynder
10. september 2006 - 18:40 #11
ok har oprette et nyt spørgmål

http://www.eksperten.dk/spm/731530
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