.net core Blazor中将文本流式传输到页面的最佳方法

.net core Blazor中将文本流式传输到页面的最佳方法,.net-core,blazor,blazor-server-side,.net Core,Blazor,Blazor Server Side,我正在Blazor中开发一个web应用程序,我想在页面上显示一个输出日志。我有许多将写入日志的事件,因此我创建了一个MarkupString变量并将其绑定到日志。我调用此函数写入日志: private async void UpdateLog(string text) { await Task.Run(() => logText = new MarkupString($"{logText}\n{text}")); await InvokeAsync(()

我正在Blazor中开发一个web应用程序,我想在页面上显示一个输出日志。我有许多将写入日志的事件,因此我创建了一个MarkupString变量并将其绑定到日志。我调用此函数写入日志:

private async void UpdateLog(string text) {
    await Task.Run(() => logText = new MarkupString($"{logText}\n{text}"));
    await InvokeAsync(() => {
        base.StateHasChanged();
    });
}
我认为这有两个问题:

1-它每次都会重新构建和绑定字符串,这意味着客户端和服务器端的CPU和内存使用量将继续增长

2-每次我编辑模型变量时,手动调用
base.StateHasChanged
都会让我感觉不对劲,我认为有更好的方法可以做到这一点

有没有一种方法可以附加文本而不是不断地重新构建它?有没有办法只在客户端存储日志,这样服务器就不会保存日志,客户端就可以根据需要清除日志

编辑 我发现管理数据和绑定的更好方法是使用
列表
@foreach
将数据绑定到中,而不是将其视为一个大字符串。这仍然将数据保存在服务器端的内存中,但比单个大字符串效果更好

编辑2 因为这实际上是一个日志,所以最好只使用浏览器控制台日志功能。我看到的实现这一点的主要方法是通过JS调用。我仍然有兴趣知道当我真的想把它呈现到屏幕上时,解决这个问题的最佳方法

await JSRuntime.InvokeVoidAsync("console.log", text);