Десериализация в массив или в список?
От: Passerby  
Дата: 16.04.21 12:56
Оценка:
Если содержимое строки десериализуется в список, то не выгоднее ли по времени делать десериализацию в массив (не проверял, может, можно и в кортеж)? Или, наоборот, т.к., возможно, будет сначала сериализация в список, а потом ToArray()? Или все-таки сначала идет подсчет количества элементов и создается массив с равным Length и затем массив заполняется? Примерно такой же вопрос по выбору класса, или структуры, кортежа, или массива, если есть несколько чисел: https://json2csharp.com/ предлагает создавать класс. Если создавать массив или структуру, то не будут ли они созданы после создания класса? Вероятно, разные обработчики Json работают по разному, но все-таки кто как десериализует?
Re: Десериализация в массив или в список?
От: varenikAA  
Дата: 16.04.21 14:17
Оценка:
Здравствуйте, Passerby, Вы писали:

конечно выгодней массив. т.к. список удваивает кажется емкость при исчерпании.
как парсится список тут сложно сказать, в xml помню было четкое разделение Dom (полностью грузит и потом парсит) и потоковые, очень быстрые отдающие элементы по мере парсинга потока.
посмотрите исходики парсера на гите.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Десериализация в массив или в список?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.04.21 14:42
Оценка:
Здравствуйте, Passerby, Вы писали:

Лучше десериализовывать в IEnumerable c использованием yield
и солнце б утром не вставало, когда бы не было меня
Re[2]: Десериализация в массив или в список?
От: Passerby  
Дата: 16.04.21 15:04
Оценка:
Здравствуйте, Serginio1, Вы писали:
S>Лучше десериализовывать в IEnumerable c использованием yield
А чем лучше? Быстрее происходит десериализация? И в дальнейшем, разве обход IEnumerable быстрее обхода массива?
Re[3]: Десериализация в массив или в список?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.04.21 17:32
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, Serginio1, Вы писали:

S>>Лучше десериализовывать в IEnumerable c использованием yield
P>А чем лучше? Быстрее происходит десериализация? И в дальнейшем, разве обход IEnumerable быстрее обхода массива?
Зависит от размера. Если размер небольшой по пофиг массив или лист. А вот если размер большой, а хранить тебе массив не нужно то
IEnumerable самое то.

Енумератор предпочтительнее ибо ты сам можешь организовать где и как хранить. Хоть в БД.
и солнце б утром не вставало, когда бы не было меня
Re[4]: Десериализация в массив или в список?
От: Passerby  
Дата: 16.04.21 18:35
Оценка: -1
Здравствуйте, Serginio1, Вы писали:
S> Зависит от размера. Если размер небольшой по пофиг массив или лист. А вот если размер большой, а хранить тебе массив не нужно то
S>IEnumerable самое то.
IEnumerable это интерфейс коллекции. Нет коллекции — нет IEnumerable. Т.е. коллекция все равно хранится. Только доступ к ней происходит медленнее. Мне критично быстродействие. Т.е. все же или List или массив, если перед этим не создается List и затем ToArray(). И был попутный вопрос про кортеж: что быстрее в доступе и создании: кортеж или массив? С одно стороны массив, т.к. не надо создавать структуру, а с другой стороны ссылочный тип нагружает сборщик мусора. В общем-то вопрос универсален: для возврата из метода нескольких однотипных чисел, что производительнее: массив или кортеж? Вопрос не касается удобства пользования, а только производительности.
Re[5]: Десериализация в массив или в список?
От: alexzzzz  
Дата: 16.04.21 20:51
Оценка: +1
Здравствуйте, Passerby, Вы писали:

S>> Зависит от размера. Если размер небольшой по пофиг массив или лист. А вот если размер большой, а хранить тебе массив не нужно то

S>>IEnumerable самое то.
P>IEnumerable это интерфейс коллекции. Нет коллекции — нет IEnumerable. Т.е. коллекция все равно хранится.

IEnumerable<int> GetNumbers()
{
    for (int i = 0; i < 10; i++)
    {
        yield return i;
    }
}


Коллекции нет, а IEnumerable есть.
Re[6]: Десериализация в массив или в список?
От: Passerby  
Дата: 17.04.21 06:14
Оценка: -1
Здравствуйте, alexzzzz, Вы писали:
A>Коллекции нет, а IEnumerable есть.
Коллекция есть. Интерфейс коллекции.
Отредактировано 17.04.2021 6:20 Passerby . Предыдущая версия .
Re[5]: Десериализация в массив или в список?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.04.21 07:10
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, Serginio1, Вы писали:

S>> Зависит от размера. Если размер небольшой по пофиг массив или лист. А вот если размер большой, а хранить тебе массив не нужно то
S>>IEnumerable самое то.
P>IEnumerable это интерфейс коллекции. Нет коллекции — нет IEnumerable. Т.е. коллекция все равно хранится. Только доступ к ней происходит медленнее. Мне критично быстродействие. Т.е. все же или List или массив, если перед этим не создается List и затем ToArray(). И был попутный вопрос про кортеж: что быстрее в доступе и создании: кортеж или массив? С одно стороны массив, т.к. не надо создавать структуру, а с другой стороны ссылочный тип нагружает сборщик мусора. В общем-то вопрос универсален: для возврата из метода нескольких однотипных чисел, что производительнее: массив или кортеж? Вопрос не касается удобства пользования, а только производительности.
Нет IEnumerable это System.Collections.Generic.IEnumerator<out T> GetEnumerator () и главное в нем MoveNext() и Current
Десериализуя список по частям ты как раз и реализуешь MoveNext() и Current, которые по времени будут значительно меньше чем затраты на десериализацию.
Ну System.ValueTuple это структура понятно, что она выгоднее
и солнце б утром не вставало, когда бы не было меня
Re[6]: Десериализация в массив или в список?
От: Passerby  
Дата: 17.04.21 08:03
Оценка:
Здравствуйте, Serginio1, Вы писали:
S> Нет IEnumerable это System.Collections.Generic.IEnumerator<out T> GetEnumerator () и главное в нем MoveNext() и Current
А что нет? IEnumerable это интерфейс. А System.Collections.Generic.IEnumerator<out T> GetEnumerator () это реализация интерфейса.
S>Десериализуя список
Десериализуется не список, а строка. Список это и есть коллекция, которая создается из строки при ее десериализации. Строка все равно должна десериализоваться в какую-нибудь коллекция, а потом уже к этой коллекции можно применять IEnumerable. К строке же IEnumerable не применить.
S>Ну System.ValueTuple это структура понятно, что она выгоднее
Это если сначала не создается список, а из него делается кортеж. А не сразу кортеж.
Отредактировано 17.04.2021 8:06 Passerby . Предыдущая версия .
Re: Десериализация в массив или в список?
От: varenikAA  
Дата: 17.04.21 08:25
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Если содержимое строки десериализуется в список

Все таки уточните о чем речь? у вас простой список через запятую в виде строки и вы его парсите или что?
А вообще, проще всего оценить скорость работы алгоритма при помощи банального теста.
прогоните его на 10, 100 , 1000... и постройте кривую t(n) и посмотрите какой вариант лучше. по памяти можно тоже не на бумажке а тестом оценить, ну замерять конечно чуть сложнее, возможно есть либы.
нет смысла гадать.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Десериализация в массив или в список?
От: Passerby  
Дата: 17.04.21 08:29
Оценка:
Здравствуйте, varenikAA, Вы писали:
AA>Все таки уточните о чем речь? у вас простой список через запятую в виде строки и вы его парсите или что?
Десериализация, о которой идет речь, это и есть парсинг строки.
Re[7]: Десериализация в массив или в список?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.04.21 08:38
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, Serginio1, Вы писали:

S>> Нет IEnumerable это System.Collections.Generic.IEnumerator<out T> GetEnumerator () и главное в нем MoveNext() и Current
P>А что нет? IEnumerable это интерфейс. А System.Collections.Generic.IEnumerator<out T> GetEnumerator () это реализация интерфейса.
S>>Десериализуя список
P>Десериализуется не список, а строка. Список это и есть коллекция, которая создается из строки при ее десериализации. Строка все равно должна десериализоваться в какую-нибудь коллекция, а потом уже к этой коллекции можно применять IEnumerable. К строке же IEnumerable не применить.
S>>Ну System.ValueTuple это структура понятно, что она выгоднее
P>Это если сначала не создается список, а из него делается кортеж. А не сразу кортеж.

Именно десериализуя список и десериализвав строку при вызове MoveNext и записывая в Current текущее значение у тебя в итоге никакого списка нет.
Нонял прошу прощения. Ты говоришь об объекте как списке полей?
и солнце б утром не вставало, когда бы не было меня
Re[8]: Десериализация в массив или в список?
От: Passerby  
Дата: 17.04.21 09:34
Оценка:
Здравствуйте, Serginio1, Вы писали:
S> Именно десериализуя список
Что такое десериализация списка?
S>Нонял прошу прощения. Ты говоришь об объекте как списке полей?
Я говорю о десериализации. Десериализации строки. Бывают другие десериализации?
Re[9]: Десериализация в массив или в список?
От: varenikAA  
Дата: 17.04.21 10:00
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Что такое десериализация списка?

Что такое десериализация?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[9]: Десериализация в массив или в список?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.04.21 10:21
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, Serginio1, Вы писали:

S>> Именно десериализуя список
P>Что такое десериализация списка?
в xml и json есть списки и массивы и они специально оформляются.
Считывать и десериализовывать можно по одному элементу

S>>Нонял прошу прощения. Ты говоришь об объекте как списке полей?

P>Я говорю о десериализации. Десериализации строки. Бывают другие десериализации?
Да бывают разные объекты. Содержащие миллионы записей итд.
Можно десериализовывать сразу, либо отложенно, часть хранить в памяти а часть на диске зная только позицию
Вариантов куча, в зависимости от алгоритма получения данных
и солнце б утром не вставало, когда бы не было меня
Re[10]: Десериализация в массив или в список?
От: Passerby  
Дата: 17.04.21 11:09
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> в xml и json есть списки и массивы и они специально оформляются.

Приведи пример json не со строкой, а со списком. Или имеешь в виду объект JObject? Это самый медленный вариант, когда строка десериализуется в JObject, а потом в нем еще раз производится поиск нужных строк.

P>>Я говорю о десериализации. Десериализации строки. Бывают другие десериализации?

S> Да бывают разные объекты. Содержащие миллионы записей итд.
S> Можно десериализовывать сразу, либо отложенно, часть хранить в памяти а часть на диске зная только позицию
S>Вариантов куча, в зависимости от алгоритма получения данных
Ничего не понял. С сервера приходят данные в виде строки, которая десериализуется. Как может сервер передать данные в виде объекта?
Сериализация это преобразование объекта в последовательность символов. Десериализация — это преобразование последовательности символов в объект. Но что такое десериализация объекта??
Re[11]: Десериализация в массив или в список?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.04.21 11:57
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, Serginio1, Вы писали:


S>> в xml и json есть списки и массивы и они специально оформляются.

P>Приведи пример json не со строкой, а со списком. Или имеешь в виду объект JObject? Это самый медленный вариант, когда строка десериализуется в JObject, а потом в нем еще раз производится поиск нужных строк.
https://developer.mozilla.org/ru/docs/Learn/JavaScript/Objects/JSON
members 'nj vfccbd

P>>>Я говорю о десериализации. Десериализации строки. Бывают другие десериализации?

S>> Да бывают разные объекты. Содержащие миллионы записей итд.
S>> Можно десериализовывать сразу, либо отложенно, часть хранить в памяти а часть на диске зная только позицию
S>>Вариантов куча, в зависимости от алгоритма получения данных
P>Ничего не понял. С сервера приходят данные в виде строки, которая десериализуется. Как может сервер передать данные в виде объекта?
P>Сериализация это преобразование объекта в последовательность символов. Десериализация — это преобразование последовательности символов в объект. Но что такое десериализация объекта??
Необязательно это база данных. Это например обмен с другой базой в виде xml или json которые могут достигать десятки гигабайт
и солнце б утром не вставало, когда бы не было меня
Re[12]: Десериализация в массив или в список?
От: Passerby  
Дата: 17.04.21 12:15
Оценка:
Здравствуйте, Serginio1, Вы писали:
P>>Приведи пример json не со строкой, а со списком. Или имеешь в виду объект JObject? Это самый медленный вариант, когда строка десериализуется в JObject, а потом в нем еще раз производится поиск нужных строк.
S> https://developer.mozilla.org/ru/docs/Learn/JavaScript/Objects/JSON
S>members 'nj vfccbd
По ссылке:
"JSON — текстовый формат данных, следующий за синтаксисом объекта JavaScript, который был популяризирован Дугласом Крокфордом"
Приведи пример json не со строкой, а со списком.

P>>Сериализация это преобразование объекта в последовательность символов. Десериализация — это преобразование последовательности символов в объект. Но что такое десериализация объекта??

S>Необязательно это база данных. Это например обмен с другой базой в виде xml или json которые могут достигать десятки гигабайт
По ссылке "Преобразование строки в родной объект называется десериализацией (преобразование из последовательной формы в параллельную), в то время как преобразовании родного объекта в строку, таким образом ,чтобы он мог быть передан через сеть, называется сериализацией(преобразование в последовательную форму)."
Что такое десериализация объекта?
Re[13]: Десериализация в массив или в список?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.04.21 14:18
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, Serginio1, Вы писали:

P>>>Приведи пример json не со строкой, а со списком. Или имеешь в виду объект JObject? Это самый медленный вариант, когда строка десериализуется в JObject, а потом в нем еще раз производится поиск нужных строк.
S>> https://developer.mozilla.org/ru/docs/Learn/JavaScript/Objects/JSON
S>>members 'nj vfccbd
P>По ссылке:
P>"JSON — текстовый формат данных, следующий за синтаксисом объекта JavaScript, который был популяризирован Дугласом Крокфордом"
P>Приведи пример json не со строкой, а со списком.
members чем является?

P>>>Сериализация это преобразование объекта в последовательность символов. Десериализация — это преобразование последовательности символов в объект. Но что такое десериализация объекта??

S>>Необязательно это база данных. Это например обмен с другой базой в виде xml или json которые могут достигать десятки гигабайт
P>По ссылке "Преобразование строки в родной объект называется десериализацией (преобразование из последовательной формы в параллельную), в то время как преобразовании родного объекта в строку, таким образом ,чтобы он мог быть передан через сеть, называется сериализацией(преобразование в последовательную форму)."
P>Что такое десериализация объекта?

Не всегда. Еще раз пример массива. Ты можешь не десериализовать его полностью или через тот же IEnumerable считывая по одному элементу.
и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.