Re[14]: Десериализация в массив или в список?
От: Passerby  
Дата: 17.04.21 14:26
Оценка:
Здравствуйте, Serginio1, Вы писали:
S> members чем является?
В C# нет такого типа.
S> Не всегда. Еще раз пример массива.
Не еще раз, а хотя бы один пример.
S> Ты можешь не десериализовать его полностью или через тот же IEnumerable считывая по одному элементу.
Массив просто нельзя десериализовать. Это не последовательность символов. Массив можно только сериализовать. И только затем полученное (это уже не массив) десериализовать.
Отредактировано 17.04.2021 14:29 Passerby . Предыдущая версия .
Re[15]: Десериализация в массив или в список?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.04.21 16:07
Оценка: 1 (1)
Здравствуйте, Passerby, Вы писали:

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

S>> members чем является?
P>В C# нет такого типа.
S>> Не всегда. Еще раз пример массива.
P>Не еще раз, а хотя бы один пример.
S>> Ты можешь не десериализовать его полностью или через тот же IEnumerable считывая по одному элементу.
P>Массив просто нельзя десериализовать. Это не последовательность символов. Массив можно только сериализовать. И только затем полученное (это уже не массив) десериализовать.

Ладно все понятно. Для информации напомню, что сейчас модно использовать Protocol Buffers
По сути являющейся базой данных. Объект может быть размазан по нескольким таблицам. Ты можешь получать объект из базы данных полность, или с отложенной загрузкой.
Опять же ты не считываешь все записи, а используя индекс считываешь нужный объект или можешь получать объекты порциями.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 19.04.2021 9:30 Serginio1 . Предыдущая версия .
Re[13]: Десериализация в массив или в список?
От: alexzzzz  
Дата: 19.04.21 20:49
Оценка:
Здравствуйте, Passerby, Вы писали:

P>По ссылке "Преобразование строки в родной объект называется десериализацией (преобразование из последовательной формы в параллельную), в то время как преобразовании родного объекта в строку, таким образом ,чтобы он мог быть передан через сеть, называется сериализацией(преобразование в последовательную форму)."

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

Преобразование строки в родной объект называется десериализацией объекта из строки, а обратное действие ― сериализация объекта в строку.

Сериализуют что-то во что-то ― объект в xml/json/...
Десериализуют что-то из чего-то — объект из xml/json/...

Объект ― всегда прямое дополнение к глаголу, а хранилище — косвенное.
Re[7]: Десериализация в массив или в список?
От: alexzzzz  
Дата: 19.04.21 21:04
Оценка:
Здравствуйте, Passerby, Вы писали:

A>>Коллекции нет, а IEnumerable есть.

P>Коллекция есть. Интерфейс коллекции.

Интерфейс — это абстракция. Коллекции нет.

using System;
using System.Collections.Generic;
using System.Threading;

foreach (var value in Generate())
{
    Console.WriteLine(value);
}

IEnumerable<int> Generate()
{
    while (true)
    {
        Thread.Sleep(1000);
        yield return DateTime.Now.Second;
    }
}
Отредактировано 19.04.2021 21:07 alexzzzz . Предыдущая версия . Еще …
Отредактировано 19.04.2021 21:06 alexzzzz . Предыдущая версия .
Re[8]: Десериализация в массив или в список?
От: Passerby  
Дата: 23.04.21 09:53
Оценка:
Здравствуйте, alexzzzz, Вы писали:
A>Интерфейс — это абстракция. Коллекции нет.
То, что перебирает интерфейс IEnumerable не абстракция.
Re[9]: Десериализация в массив или в список?
От: alexzzzz  
Дата: 23.04.21 10:50
Оценка:
Здравствуйте, Passerby, Вы писали:

A>>Интерфейс — это абстракция. Коллекции нет.

P>То, что перебирает интерфейс IEnumerable не абстракция.

И не коллекция
Re[10]: Десериализация в массив или в список?
От: Passerby  
Дата: 23.04.21 15:25
Оценка:
Здравствуйте, alexzzzz, Вы писали:
A>И не коллекция
Как угодно назови, но перебирается десериализуемое.
Re[11]: Десериализация в массив или в список?
От: alexzzzz  
Дата: 23.04.21 16:20
Оценка:
Здравствуйте, Passerby, Вы писали:

A>>И не коллекция

P>Как угодно назови, но перебирается десериализуемое.

Перебирается конечно, но просто в цикле, без создания промежуточных коллекций. В этом и смысл.
Re[12]: Десериализация в массив или в список?
От: Passerby  
Дата: 23.04.21 17:51
Оценка:
Здравствуйте, alexzzzz, Вы писали:
A>Перебирается конечно, но просто в цикле, без создания промежуточных коллекций. В этом и смысл.
Если без промежуточной коллекции, то для каждой итерации по-новому разбирается строка (предыдущий разбор нигде в промежуточной коллекции не сохранен).
Re[13]: Десериализация в массив или в список?
От: alexzzzz  
Дата: 24.04.21 22:49
Оценка:
Здравствуйте, Passerby, Вы писали:

A>>Перебирается конечно, но просто в цикле, без создания промежуточных коллекций. В этом и смысл.

P>Если без промежуточной коллекции, то для каждой итерации по-новому разбирается строка (предыдущий разбор нигде в промежуточной коллекции не сохранен).

Нет. В этом примере, чтобы напечатать на экране очередное значение, для каждой итерации перезапуск часов с нуля не происходит
  Скрытый текст
using System;
using System.Collections.Generic;
using System.Threading;

foreach (var value in Generate())
{
    Console.WriteLine(value);
}

IEnumerable<int> Generate()
{
    while (true)
    {
        Thread.Sleep(1000);
        yield return DateTime.Now.Second;
    }
}


Тут тоже
  Скрытый текст
using System;
using System.Collections.Generic;

foreach (var value in Parse(",,,1 20,  300; 4004++"))
{
    Console.WriteLine(value);
}

IEnumerable<int> Parse(string input)
{
    var index = 0;

    while (true)
    {
        while (index < input.Length && char.IsDigit(input[index]) == false)
        {
            index++;
        }

        if (index >= input.Length)
        {
            yield break;
        }

        var count = 1;
        while (index + count < input.Length && char.IsDigit(input[index + count]))
        {
            count++;
        }

        yield return int.Parse(input[index..(index + count)]);
        index += count + 1;
    }
}
Отредактировано 24.04.2021 22:54 alexzzzz . Предыдущая версия .
Re[14]: Десериализация в массив или в список?
От: Passerby  
Дата: 25.04.21 05:02
Оценка:
Здравствуйте, alexzzzz, Вы писали:
В этих примерах вывод в консоль, так же сработает и для другого однократного получения результата. А если результат нужен, чтобы его программа несколько раз запрашивала, то десериализация строки в только либо в коллекцию и IEnumerable будет лишним, либо каждый раз вызывать парсить строку через IEnumerable, что еще хуже. Т.е. только два варианта, когда IEnumerable имеет смысл применять при десериализации: 1. Результат нужен только один раз в одном месте программы, 2. Строка очень большая и List не помещается в память или очень много памяти занимает.
Re[15]: Десериализация в массив или в список?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 25.04.21 16:27
Оценка:
Здравствуйте, Passerby, Вы писали:

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

P>В этих примерах вывод в консоль, так же сработает и для другого однократного получения результата. А если результат нужен, чтобы его программа несколько раз запрашивала, то десериализация строки в только либо в коллекцию и IEnumerable будет лишним, либо каждый раз вызывать парсить строку через IEnumerable, что еще хуже. Т.е. только два варианта, когда IEnumerable имеет смысл применять при десериализации: 1. Результат нужен только один раз в одном месте программы, 2. Строка очень большая и List не помещается в память или очень много памяти занимает.

Общие затраты будут практически те же. Ну на MoveNext и Current миллиард вызовов в секунду. Дольше уходит на парсинг строк.
Можешь закачать куда угодно если заранее известно количество то конечно массив
и солнце б утром не вставало, когда бы не было меня
Re[16]: Десериализация в массив или в список?
От: Passerby  
Дата: 25.04.21 20:10
Оценка:
Здравствуйте, Serginio1, Вы писали:
S> Общие затраты будут практически те же. Ну на MoveNext и Current миллиард вызовов в секунду. Дольше уходит на парсинг строк.
Так если не сделать сразу коллекцию, то каждый раз когда программе нужны будут данные с IEnumerable будет запускаться новый парсинг (если десериализатор не делает предварительно коллекцию и не кеширует ее). И даже если данные нужны только один раз, какой смысл в IEnumarable, если можно сразу в коллекцию? Только если строка длиннющая или может статься, что не все данные нужны, а только несколько первых, тогда IEnumarable.
S>Можешь закачать куда угодно если заранее известно количество то конечно массив
Как информация о количестве может повлиять на скорость десериализации? Вместо List объявляется массив, в который десериализуется строка. После десериализации можно посмотреть Length. Скорость зависит от того как реализована десериализация в массив: сразу подсчитывается количество элементов и объявляется массив или сначала десериализуется в список, а потом ToArray(). Хотя и в случае десериализации сразу в массив не факт, что это будет быстрее, т.к. подсчет элементов это лишняя операция, а в случае списка просто добавляется следующий элемент, пока не кончится строка.
Отредактировано 25.04.2021 20:14 Passerby . Предыдущая версия .
Re[17]: Десериализация в массив или в список?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.04.21 14:21
Оценка:
Здравствуйте, Passerby, Вы писали:

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

S>> Общие затраты будут практически те же. Ну на MoveNext и Current миллиард вызовов в секунду. Дольше уходит на парсинг строк.
P>Так если не сделать сразу коллекцию, то каждый раз когда программе нужны будут данные с IEnumerable будет запускаться новый парсинг (если десериализатор не делает предварительно коллекцию и не кеширует ее). И даже если данные нужны только один раз, какой смысл в IEnumarable, если можно сразу в коллекцию? Только если строка длиннющая или может статься, что не все данные нужны, а только несколько первых, тогда IEnumarable.
S>>Можешь закачать куда угодно если заранее известно количество то конечно массив
P>Как информация о количестве может повлиять на скорость десериализации? Вместо List объявляется массив, в который десериализуется строка. После десериализации можно посмотреть Length. Скорость зависит от того как реализована десериализация в массив: сразу подсчитывается количество элементов и объявляется массив или сначала десериализуется в список, а потом ToArray(). Хотя и в случае десериализации сразу в массив не факт, что это будет быстрее, т.к. подсчет элементов это лишняя операция, а в случае списка просто добавляется следующий элемент, пока не кончится строка.

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