Mudblazor muddialog не должным образом освобождает память/утилизациюC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Mudblazor muddialog не должным образом освобождает память/утилизацию

Сообщение Гость »

У меня есть приложение среднего размера с таблицей, и одной из функций таблицы является возможность нажимать на кнопку, которая открывает вид этой строки в форме Muddialog. Диалог загружает данные из API и отображает его. В частности, он также загружается в аудио, который затем преобразуется в Base64 для работы встроенного аудиоплеере HTML. Однако это не было бы проблемой, если бы Muddialog правильно утилизировал все свои ресурсы. Что происходит, так это то, что каждый раз, когда открывается диалог, новая память, по -видимому, распределяется на диалоговое окно, и после закрытия не удаляется, как видно в куче памяти: Хип памяти.
Это приводит к утечке памяти и последующему сбою после того, как откроется достаточное количество диалогов, особенно большие. < /P>
есть несколько змеев из исходного кода: < /p> .

Код: Выделить всё

Parent.razor

Код: Выделить всё

@inject IDialogService DialogService

private readonly DialogOptions _dialogOptions = new() { MaxWidth = MaxWidth.Medium, FullWidth = true, CloseButton = true, CloseOnEscapeKey = true, NoHeader = false };
private async Task OpenDialogViewAsync(int id, string name)
{
JsonDocument text = await GetText(textId);
var parameters = new DialogParameters
{
{ "name", name},
{ "jsonContent", text},
{ "id", transcriptionId}
};
var completeTitle = $"File: {name}";

var dialog = await DialogService.ShowAsync(completeTitle, parameters, _dialogOptions);
var result = await dialog.Result;
}
< /code>
TextViewDialog.razor

@implements IDisposable

protected override async Task OnInitializedAsync()
{
_loading = true;
await PerformSearch();
_loading = false;
await LoadAudioUrl();
StateHasChanged();
}
private async Task LoadAudioUrl()
{
try
{
audioBytes = await getAudio(id);
if (audioBytes != null && audioBytes.Length > 0)
{
audioUrl = $"data:audio/mpeg;base64,{Convert.ToBase64String(audioBytes)}";
Logger.LogInformation("Audio URL set successfully.");
}
else
{
Logger.LogWarning("Audio file is empty or null.");
}
}
catch (Exception ex)
{
Logger.LogError(ex, "Error loading audio URL");
Snackbar.Add($"Error loading audio URL: {ex.Message}", MudBlazor.Severity.Error);
}
StateHasChanged();
}

private void Close()
{
Dispose();
MudDialog.Close(DialogResult.Ok(true));
}
< /code>
I have tried implementing IDisposable and clearing the variables defined in that dialog:
public void Dispose()
{
JSRuntime.InvokeVoidAsync("disposeAudioPlayer");
JsonContent = null;
TextContent = null;
Array.Clear(audioBytes, 0, audioBytes.Length);
}
< /code>
But that had no effect. I read that MudBlazor calls the Dispose() method once the dialog is closed but I don't seem to be able to understand what the root cause of the issue is or if I am setting something up wrong.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -disposing
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»