0

在 C# .Net 6 中确定元素或字符串是否包含 JSON 格式数据的最有效方法是什么。将有数十亿行要搜索,并且不知道使用 JSON.Net、System.JSON 或正则表达式或其他方式是否是计算成本最低的。理想情况下,是 .containsJson 方法的基础,该方法将完全限定的 JSON 文档短路,很可能是 JSON 格式的数据。

4

1 回答 1

1

开箱即用Json.NET比 DataContractJsonSerializer 和 JavaScriptSerializer 更快。 Json.NET支持直接从流中反序列化,使用一次StreamReader读取一个 JSON 字符串反序列化您的 JSON ,而不是将整个 JSON 字符串加载到内存中。

HttpClient client = new HttpClient();

using (Stream s = client.GetStreamAsync("http://www.test.com/large.json").Result)
using (StreamReader sr = new StreamReader(s))
using (JsonReader reader = new JsonTextReader(sr))
{
    JsonSerializer serializer = new JsonSerializer();

    // read the json from a stream
    // json size doesn't matter because only a small piece is read at a time from the HTTP request
    Person p = serializer.Deserialize<Person>(reader);
}

为了使应用程序始终保持快速,重要的是尽量减少 .NET 框架执行垃圾收集所花费的时间。分配太多对象或分配非常大的对象可能会在垃圾收集正在进行时减慢甚至停止应用程序。

为了最大限度地减少内存使用和分配的对象数量,Json.NET支持直接序列化和反序列化到流。一次读取或写入 JSON,而不是将整个 JSON 字符串加载到内存中,这在处理大小超过 85kb 的 JSON 文档以避免 JSON 字符串最终进入大对象堆时尤为重要。

请检查以下链接以获得更好的想法:

  1. JSON.NET 性能提示
  2. 在 .NET 中解析大型 JSON 文件
于 2021-12-15T13:45:05.377 回答