在 C# .Net 6 中快速查明元素是否包含 JSON 格式的数据

Quickly finding out if element contains JSON formatted data in C# .Net 6

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

开箱即用 Json.NET 比 DataContractJsonSerializer 和 JavaScriptSerializer 更快。 Json.NET 支持直接从流反序列化,反序列化你的 JSON 使用 StreamReader 一次读取 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 框架执行 garbage collection 所花费的时间。分配太多对象或分配非常大的对象会在进行垃圾收集时减慢甚至停止应用程序。

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

请查看下方link以获得更好的想法:

  1. JSON.NET Performance Tips