2015-10-30 12 views
5

PetaPoco.Database वस्तु IDisposable लेकिन मैं लागू करता है शायद ही कभी अगर कभी देख कोड नमूने (सहित PetaPoco के own website) है कि एक बयान का उपयोग कर के रूप में इस में शामिल हैं:PetaPoco.Database IDIposable लागू करता है, तो अधिकांश उदाहरणों में 'उपयोग' कथन क्यों नहीं है?

using (var db = new Database("MyConnectionString")) 
{ 
    // Do database stuff 
} 

अक्सर मैं बस देखें:

var db = new Database("MyConnectionString"); 
// Do database stuff 
// I never see .Dispose() called. 

PetaPoco.Database ऑब्जेक्ट्स को वास्तव में कैसे सौंपना चाहिए?

+0

के साथ कुछ लेना देना नहीं है यदि यह IDISposable लागू करता है तो आपको निपटान को कॉल करना सुनिश्चित करना चाहिए। और, किसी भी मामले में, यदि निपटान विधि – Steve

+0

कुछ भी नहीं करती है, तो यदि आपके पास डिस्पोजेबल लागू किया गया है तो मुझे इसे 'उपयोग' ब्लॉक में नहीं डालना चाहिए, क्योंकि यह आमतौर पर 'उपयोग' का अर्थ है इस्तेमाल किया गया? – Howiecamp

+0

@Howiecamp यह है और आपको चाहिए। वे उदाहरणों में ऐसा नहीं करते हैं क्योंकि जीसी इस पर ध्यान रखता है जब 'ऐपडोमेन' कार्यक्रम के साथ नष्ट हो जाता है। – Behrooz

उत्तर

-2

IDisposableGC बताता है कि object से छुटकारा पाने के लिए क्या करना है।
usingGCobject से छुटकारा पाने के लिए पूछता है जब इसका दायरा समाप्त होता है।
using का उपयोग object के साथ IDisposable बेकार नहीं है।

+0

लेकिन PetaPoco.Database * * आईडीआईस्पोजेबल का समर्थन करता है। – Howiecamp

+0

@Howiecamp यह मैंने जो कहा उसके खिलाफ नहीं है। ऊपर मेरी दूसरी टिप्पणी देखें। मैंने केवल 3 अंक दिए हैं। – Behrooz

+0

लेकिन ऑब्जेक्ट * * आईडीआईस्पोज़ेबल को कार्यान्वित करने के बाद, ऑब्जेक्ट्स के साथ उपयोग करने के बारे में टिप्पणी का क्या मतलब है * * आईडीआईस्पोजेबल लागू नहीं करता है? – Howiecamp

0

यह इस बात पर निर्भर करता है कि आप क्या कार्यान्वित कर रहे हैं। एक डाटाबेस ऑब्जेक्ट यह डेटाबेस से कनेक्शन है, आप डेटाबेस में एक SQL स्टेटमेंट निष्पादित करते समय हर बार कनेक्शन का निपटान नहीं करना चाहते हैं क्योंकि प्रदर्शन भयानक होगा।

आप एक वेब आधारित समाधान को कार्यान्वित कर रहे हैं, तो आप आम तौर पर अनुरोध के अनुसार एक डेटाबेस ऑब्जेक्ट का उपयोग करें, लेकिन यह अनुरोध निश्चित रूप से, विभिन्न फिल्टर, वैश्विक फिल्टर में और कई नियंत्रक के तरीकों में कई एसक्यूएल बयान निष्पादित ताकि आप Using

उपयोग नहीं कर सकते
3

एक साधारण नियम के रूप में: यदि कोई वर्ग IDISposable लागू करता है तो आगे बढ़ें और इसे उपयोग में लपेटें। वे वास्तव में किसी भी अप्रबंधित संसाधनों का उपयोग नहीं कर रहे हैं, लेकिन यह आपको चोट पहुंचाने के लिए भविष्य में प्रमाणित नहीं करेगा।

+1

अधिक सहमत नहीं हो सका! हालांकि, कुछ एपीआई सिनाक्स चीनी के लिए निपटान का उपयोग करते हैं, जो इस तरह से उपयोग किए जाने पर अच्छी तरह से प्रलेखित किया जाना चाहिए। मैं पेटापोको के लिए इसे जोड़ने के लिए एक नोट जोड़ने जा रहा हूं। – Plebsori

1

पेटापोको रखरखाव यहां। निपटान CloseSharedConnection() पर कॉल करने जैसा ही है। हालांकि, सी # सिंटैक्स केवल 0 (38) IDisposable के साथ उपयोग करने का समर्थन करता है। उदाहरण के लिए IDBConnection, स्मृति से, Close और Dispose दोनों का समर्थन करता है।

मूल रूप से, यह विकल्प

उदाहरण 1

using(var db = new PetaPoco()) 
{ 
    // some code 
} 

उदाहरण 2

var db = new PetaPoco() 

try 
{ 
    // code 
} 
finally 
{ 
    db.CloseSharedConnection(); 
} 
0

जीसी कॉल Object.Finalize करने पर निर्भर करता। IDisposable जीसी द्वारा नहीं कहा जाता है, इसे मैन्युअल रूप से बुलाया जाना है। जीसी के पास using और IDisposable

संबंधित मुद्दे