पिक्सलशैडर का उपयोग करने के लिए माइक्रोसॉफ्ट के example में वे एक सिंगलटन का उपयोग करते हैं। मैंने other places में एक ही पैटर्न देखा है, और यहां वे कहते हैं किएक सिंगलटन पिक्सेलशैडर का उपयोग करना चाहिए सबसे अच्छा अभ्यास?
पिक्सेल शेडर एक निजी स्थैतिक क्षेत्र _pixelShader में संग्रहीत है। यह क्षेत्र स्थैतिक है, क्योंकि संकलित शेडर कोड का एक उदाहरण पूरे वर्ग के लिए पर्याप्त है।
हमने इस पैटर्न का उपयोग करते समय कई मेमोरी लीक मुद्दों को देखा है। पिक्सेलशैडर शामिल है इवेंट हैंडलिंग जो हमेशा सही ढंग से साफ़ नहीं होता है। हमें freeze उन्हें था, और कुछ सुधार देखा। हमें मैन्युअल रूप से कुछ डिटेचमेंट
// Attach/detach effect as UI element is loaded/unloaded. This avoids
// a memory leak in the shader code as described here:
element.Loaded += (obj, args) =>
{
effect.PixelShader = ms_shader;
element.Effect = effect;
};
element.Unloaded += (obj, args) =>
{
effect.PixelShader = null;
element.Effect = null;
};
और अभी भी तनाव के तहत उस क्षेत्र में मेमोरी लीक अभी भी हैं। क्या किसी को पता है कि पिक्सेलशैडर एक सिंगलटन का उपयोग करने में परेशानी के लायक भारी संसाधनों का उपयोग करता है?