【发布时间】:2026-02-04 02:30:01
【问题描述】:
在 Microsoft 的 example 中,关于如何使用 PixelShader,他们使用单例。我在other places 中看到了相同的模式,这里他们说
像素着色器存储在私有静态字段 _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 使用的大量资源是否值得使用单例的麻烦?
【问题讨论】:
标签: c# wpf pixel-shader