Почему `jarray.tobject >` быстрее, чем `jarray.tobject `C#

Место общения программистов C#
Ответить
Anonymous
 Почему `jarray.tobject >` быстрее, чем `jarray.tobject `

Сообщение Anonymous »

Мы пытаемся микро-оптимизировать некоторые части нашего производственного кода, и я ожидал, что использование массива , как правило, будет лучше, чем список s в .net, и в большинстве случаев мои тесты указывают на это. Тем не менее, кажется, что jarray.tobject быстрее, чем jarray.tobject †. Jarray s - это ilist и имеют частное поле личного списка Readonly _values . Вот почему Jarray.ToObject быстрее, чем jarray.tobject ? Первый на самом деле ничего не бросает ни на что? Я хочу понять, какая часть исходного кода jarray.tobject фактически вызывает, чтобы проверить это. Мне кажется, что я должен изучить jsonserializer.deserializeinternal , потому что jtoken.tobject в конечном итоге вызывает это, но я не могу понять логику исходного кода за пределами этого. Можете ли вы помочь мне найти причину?using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using Newtonsoft.Json.Linq;

[MemoryDiagnoser]
public class JArrayDeserializationBenchmark
{
private JArray myJArray;

[GlobalSetup]
public void Setup()
{
string json = """
[
{"id": 1, "name": "aaads", "value": 10},
{"id": 2, "name": "aaas", "value": 20},
{"id": 3, "name": "ds", "value": 30}
]
""";
myJArray = JArray.Parse(json);
}

[Benchmark]
public Dictionary[] DeserializeToArray()
{
return myJArray.ToObject()!;
}

[Benchmark]
public List DeserializeToList()
{
return myJArray.ToObject()!;
}

public static void Main(string[] args)
{
BenchmarkRunner.Run();

// // Print the results to make sure the benchmarks are executed correctly
// var benchmark = new JArrayDeserializationBenchmark();
// benchmark.Setup();
// var arrayResult = benchmark.DeserializeToArray();
// var listResult = benchmark.DeserializeToList();
// Console.WriteLine($"Array Result Count: {arrayResult.Length}");
// Console.WriteLine($"List Result Count: {listResult.Count}");
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... -toobjectt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»