客户端Blazor:资源加载缓慢



我有一些代码行,它们在Xamarin.Forms中运行良好,但在客户端Blazor中表现很差。

这是代码:
string s = System.Text.Encoding.UTF8.GetString(Properties.Resources.city_list); List _cityList = JsonConvert.DeserializeObject<List>(s).ToList();

city_list是OpenWeatherMap中的一个庞大列表,包含了全球所有城市。稍后,我想将此列表显示为select中的选项,因此我希望将其保留在客户端上。现在的代码很慢,运行它需要几分钟时间。你知道如何让它更快吗?

提前谢谢Janos

更新:我删除了Take(20(,因为这不是问题的一部分。我想得到完整的名单。

city_list是Json格式的文本文件。我把它添加为Resource,所以它在这段代码中是一个字节数组。

这个问题与Blazor中非常慢的字符串解析有关。昨天,我在解析6mb的json数据时遇到了同样的问题。即使使用较小的json数据,页面登录之间的延迟也很明显。不过,在非Blazor.NET应用程序中,解析速度非常快。

所以我弄清楚了问题是关于json解析还是一般的字符串解析。我在reguler控制台应用程序和Blazor WebAssembly上测试了以下代码。差异是巨大的:控制台(768毫秒(,Blazor 45(秒(。这似乎是web程序集的一个问题,因为javascript解析也很快。这个问题已经存在一段时间了。另请参见此处。https://github.com/dotnet/runtime/issues/40386

话虽如此,尽管这是一个非常简单的问题,但它完全使Blazor作为一个可用于生产的框架无效。

这已经在控制台和Blazor的.NET6上进行了测试。

public class StringParsePerfTest
{
private string Text { get; set; } = "";
public StringParsePerfTest()
{
for(int i = 0; i < 10000; i++)
{
if (i % 3 == 0) Text += "|";
else Text += "a";
}
}
public void Test()
{
var start = DateTime.Now;
start= DateTime.Now;
for(int i = 0; i < 10000; i++)
{
var splitted = Text.Split("|");
}
var end = DateTime.Now;
Console.WriteLine($"{(end - start).TotalMilliseconds}");
}
}

相关内容

  • 没有找到相关文章

最新更新