18. juli 2006 - 14:59Der 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 ?
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
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.
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.