下面我附上了我的 blazor 代码。
private delegate Task keyActionDelegate(KeyboardEventArgs e);
private KeyActionDelegate _keyActionDelegate;
protected override async Task OnParametersSetAsync()
{
await base.OnParametersSetAsync();
_keyActionDelegate = new KeyActionDelegate(keyActionHandler);
Attributes = BaseUtils.UpdateDictionary("onkeydown", _keyActionDelegate, Attributes);
}
internal async override void ComponentDispose()
{
base.ComponentDispose();
_keyActionDelegate = null;
}
由于 keyActionDelegate 发生了内存泄漏。
我尝试在 ComponentDispose() 方法中将 _keyActionDelegate 变量设置为 null 值,但仍然发生内存泄漏。有没有其他方法可以避免内存泄漏?
protected override async Task OnParametersSetAsync()
{
_keyActionDelegate = keyActionHandler; // shorter syntax
// this is the leak
Attributes = BaseUtils.UpdateDictionary("onkeydown", _keyActionDelegate, Attributes);
}
internal async override void ComponentDispose()
{
base.ComponentDispose();
_keyActionDelegate = null; // doesn't help
// you need something like this
BaseUtils.RemoveFromDictionary("onkeydown", _keyActionDelegate);
}