Мы пытаемся микро-оптимизировать некоторые части нашего производственного кода, и я ожидал, что использование массива , как правило, будет лучше, чем список 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
Почему `jarray.tobject >` быстрее, чем `jarray.tobject `
⇐ C#
Место общения программистов C#
-
Anonymous
1754133431
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}");
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79723317/why-is-jarray-toobjectlistt-faster-than-jarray-toobjectt[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия