Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


IDisposable, när behöver jag implementera den?

Postades av 2009-05-01 20:59:46 - Jonas Sjöblom, i forum c# (c-sharp), Tråden har 4 Kommentarer och lästs av 1051 personer

Jag har precis börjat använda NHibernate och är fortfarande på testningsstadiet. Jag har till stor del följt guiderna på http://www.summerofnhibernate.com/ som jag blev tipsad om i en annan tråd. Men nu har jag börjat ta min egen approach istället för att blint följa guiden.

Så jag har skapat en klass som heter DataLayer vars konstructor ser ut såhär:
<code>
public DataLayer()
{
_session = SessionManager.GetNewSession();
_transactionManager = new TransactionManager(_session);
}
</code>

SessionManager.GetNewSession() är en statisk metod som skapar ett statiskt ISessionFactory objekt (om det inte redan finns) och sedan returnerar en ISession.

Sessionen sparas som ni ser i en _session variabel samt skickas till TransactionManagern som jag använder för att med lite mindre kod hantera transaktioner.


Nu är frågan: Behöver jag disposa sessionen och transactionmanagern? Och hur går jag i så fall till väga för att göra det? Jag har följt guiden http://www.codeguru.com/csharp/.net/net_general/debugginganderrorhandling/article.php/c14173 lite grann men känner mig nästan mera förvirrad efteråt.

Bland annat står det: "The only thing you should do in Dispose() is clean up and free resources. You should not be calling other methods or referencing any other objects."

Vad exakt är "resources" och vad menas med "other objects" är min session ett "annat object" och ska alltså inte disposas?


Svara

Sv: IDisposable, när behöver jag implementera den?

Postades av 2009-05-02 14:13:31 - Martin Adrian

Det beror på 2 saker:

1. Är objekten IDisposable
2. "Äger" din klass objekten.

TransactionManager är enkelt. Om TransactionManager implementerar IDisposable så måste din klass också göra det och anropa _transactionManager.Dispose()

ISession är klurigare. På din beskriving verkar det som om det är SessionManagern som äger objektet och borde därför vara ansvarig för att frigöra det. Eftersom SessionManager är statisk så implementerar den inte IDisposable men den kanske innehåller en ReleaseSession som gör motsvarande sak. Den metoden skall du isåfall anropa i Dispose(). Finns det ingen sån metod innehåller ISession inte några resurser som behöver frigöras och du behöver ingen Dispose.

>Vad exakt är "resources"

Jag skulle säga att det är globala saker i systemet som det finns begränsat antal av. dvs om du använder dem så kan det hindra andra program från att använda dem. Det kan vara öppna filer, anslutningar till databaser, grafikobjekt mm. Minne är också en resurs men det har en särställning i .Net eftersom det lämnas tillbaka automatiskt när det inte används längre.


Svara

Sv:IDisposable, när behöver jag implementera den?

Postades av 2009-05-04 07:28:50 - Jonas Sjöblom

Tack, då förstår jag lite bättre. Nu ahr jag även strukturerat om koden lite så det blir lättare att hantera.

Nu är nästa fråga, vad gör
GC.SuppressFinalize(true); ?


Svara

Sv: IDisposable, när behöver jag implementera den?

Postades av 2009-05-04 08:40:28 - Martin Adrian

I .Net kan en klass ha en Finalizer. Denna anropas (eventuellt) när systemet städar upp minnet. Det är en slags sista utväg för att lämna tillbaka resurser om någon glömt att anropa Dispose.

Finalizers är dock ganska komplicerade i .Net och ställer till det vid minnesstädningen. SuppressFinalize talar helt enkelt om för systemet att nu har Dispose utförts så Finalizern behöver inte anropas.

(Enligt min åsikt så skall dock en Finalizer endast kasta ett undantag för att uppmärksamma programmeraren på att han glömt Dispose någonstans. Alla andra lösningar är bara sätt att dölja att någon gjort fel.)


Svara

Sv:IDisposable, när behöver jag implementera den?

Postades av 2009-05-06 14:26:00 - Jonas Sjöblom

Tack, det klarade upp en hel del!


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 635
27 958
271 741
565
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies