在微軟的example中如何使用PixelShader他們使用的是單例。我在other places中看到了相同的模式,在這裏他們說應該使用單例PixelShader是否是最佳做法?
像素着色器存儲在私有靜態字段_pixelShader中。該字段是靜態的,因爲編譯着色器代碼的一個實例對於整個類是足夠的。
使用此模式時,我們已經看到了幾個內存泄漏問題。 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;
};
即使在壓力下,該區域仍然存在內存泄漏。有沒有人知道PixelShader是否使用了大量資源,這些資源在使用單例時很麻煩?