.net core Blazor中将文本流式传输到页面的最佳方法
我正在Blazor中开发一个web应用程序,我想在页面上显示一个输出日志。我有许多将写入日志的事件,因此我创建了一个MarkupString变量并将其绑定到日志。我调用此函数写入日志:.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(()
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);