कई जीडीआई + कक्षाएं IDISposable लागू करती हैं, लेकिन मुझे यकीन नहीं है कि मुझे निपटान कब करना चाहिए। उदाहरण के लिए यह स्पष्ट है कि मैं new
या Graphics.CreateGraphics
जैसी स्थिर विधियों के साथ बना हूं। लेकिन संपत्तियों के बारे में क्या है जो संपत्ति गेटर्स द्वारा लौटाए जाते हैं? मैं अक्सर इस तरह कोड लिखने:जब आप जीडीआई + संसाधनों का निपटान करते हैं?
var oldRgn = g.Clip;
using (var rectRegion = new Region(rectangle))
{
g.Clip = rectRegion;
// draw something
}
g.Clip = oldRgn;
एम आई oldRgn
उसके बाद निपटान के लिए माना जाता? मेरा मेमोरी प्रोफाइलर मुझे बताता है कि अगर मैं नहीं करता तो अनजान उदाहरण हैं। और परावर्तक में कार्यान्वयन को देखकर तो कम से कम इस बात की पुष्टि है कि गेटर जाहिरा तौर पर हर बार यह लागू है एक नया उदाहरण बनाता है:
// Graphics.Clip code from Reflector:
public Region get_Clip()
{
Region wrapper = new Region();
int status = SafeNativeMethods.Gdip.GdipGetClip(new HandleRef(this, this.NativeGraphics), new HandleRef(wrapper, wrapper.nativeRegion));
if (status != 0)
{
throw SafeNativeMethods.Gdip.StatusException(status);
}
return wrapper;
}
मैं MSDN में इस बारे में कुछ भी नहीं मिला, और दस्तावेज में नमूने कभी नहीं लग रहे हैं कुछ भी निपटाने के लिए।
उपयोग ब्लॉक में "g.clip = oldRgn" को स्थानांतरित करने का प्रयास करें। –