当组件实现 IDisposible 时 Blazor 调用 Dispose

Des*_* Ma 7 c# blazor

我阅读了一些有关 Blazor 组件生命周期的内容,并注意到 IDisposible 可用于释放内存。据我对 IDisposable 的 Dispose 方法的理解,除非手动调用或由垃圾收集器调用,否则不能保证调用它。

鉴于 Blazor 组件已实现 IDispose,一旦从 UI 中删除该组件,是否会立即强制调用 Dispose 方法?

mez*_*tou 10

Blazor 调用DisposeDisposeAsync如果您实施IDisposableIAsyncDisposable

https://learn.microsoft.com/en-us/aspnet/core/blazor/components/lifecycle?view=aspnetcore-5.0#component-disposal-with-idisposable-and-iasyncdisposable-1

如果组件实现IDisposableIAsyncDisposable或两者,则当从 UI 中删除该组件时,框架会调用非托管资源处置。处置可以随时发生,包括在组件初始化期间。


Hen*_*man 6

IDisposible 可用于释放内存

这不是正确的看待问题的方式。Dispose() 用于释放资源,而不是内存。
仅当您的组件包含(托管或非托管)资源时,您才需要它。例如计时器或 DbContext。

一旦组件从 UI 中移除,Dispose 方法是否会被强制调用?

是的。通常我会将其用于页面,但它也适用于被删除的组件,例如@if(...) { ... }