BlazorChartjs icon indicating copy to clipboard operation
BlazorChartjs copied to clipboard

Dispose reference

Open gmlloves opened this issue 2 years ago • 1 comments

Hello Enrico,

I re-create the charts on demand and I have some memory leaks because some references must be disposed (I am not an expert on this issue).

1.- moduleTask in ChartjsInterop:

  public async ValueTask DisposeAsync()
  {
      if (moduleTask.IsValueCreated)
      {
          await (await moduleTask.Value).DisposeAsync();
      }
  }

2.- JsModule and dotNetObjectRef in Chart.razor. :

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    try
    {
        ...
        dotNetObjectRef?.Dispose();
        dotNetObjectRef = DotNetObjectReference.Create(Config);

        JSModule ??= new ChartJsInterop(JSRuntime);
        ....
    }
    catch (ObjectDisposedException)
    {
        // Sometimes the object reference is released but JS invoke some event.
    }
}
public async ValueTask DisposeAsync()
{
    dotNetObjectRef?.Dispose();
    dotNetObjectRef = null;

    if (JSModule is not null)
    {
         await JSModule.DisposeAsync();
        JSModule = null;
    }
}

Let me know what do you think :) Thank you, Gaston

gmlloves avatar Jun 20 '23 19:06 gmlloves

Thank you Gaston. I'll add those suggestion in my next release. Enrico

erossini avatar Jun 25 '23 10:06 erossini