Информация об изменениях

Сообщение Re[5]: Как правильно сортировать содержимое больших файлов? от 10.09.2022 11:41

Изменено 10.09.2022 12:39 artelk

Re[5]: Как правильно сортировать содержимое больших файлов?
Здравствуйте, _FRED_, Вы писали:

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


_FR>>>А попробуйте сгенерить файл моей же и на нём проверить?

S>>Проверил с новой версией. Общее время 13:44 с тем же файлом данных и вашими настройками для 10 Гб.
S>>Т.е. у вас быстрее чем версия gandjustas (15,5 мин), но медленнее чем artelk (6,36 мин). Хотя это все условно — artelk жестко привязался к ASCII.

_FR>А на расход памяти вы не посмотрели?

_FR>Все эти скорости без привязки к тому, сколько памяти потребовалось ничего не стоят

Да, нужно договорится об условиях и ограничениях, чтобы было интересно сравнивать.
Предлагаю такие:
  1. Строки Utf-8 со случайной (равномерно распределенной) длиной [0, 1024). Состоят из символов, которые, после декодирования, укладываются в двухбайтный char. Почти все символы ASCII-7. Закладываться на случайность и равномерную распределенность символов нельзя
  2. Числа слева тоже случайны в интервале [0, UInt64.Max)
  3. Разделитель строк: \n
  4. Нужно уметь сравнивать строки разными компарерами. При сравнении реализаций проверяем время для Ordinal и InvariantCultureIgnoreCase.
  5. Ограничение на память "живых" объектов (мусор GC не включаем): 200Мб.
    • Включая 24..26-байтные заголовки у объектов в куче (для .Net) и 8-байтные ссылки на них.
    • Включая память на буферы чтения\записи файлов.
    Ограничение не слишком жесткое, можно, например, закладываться на среднюю длину строки и что почти все символы ASCII-7.

PS
Думаю, что строки в памяти можно хранить как utf-8 массивы байт. А простое их побайтное сравнение эквивалентно Ordinal сравнению, так?
Re[5]: Как правильно сортировать содержимое больших файлов?
Здравствуйте, _FRED_, Вы писали:

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


_FR>>>А попробуйте сгенерить файл моей же и на нём проверить?

S>>Проверил с новой версией. Общее время 13:44 с тем же файлом данных и вашими настройками для 10 Гб.
S>>Т.е. у вас быстрее чем версия gandjustas (15,5 мин), но медленнее чем artelk (6,36 мин). Хотя это все условно — artelk жестко привязался к ASCII.

_FR>А на расход памяти вы не посмотрели?

_FR>Все эти скорости без привязки к тому, сколько памяти потребовалось ничего не стоят

Да, нужно договорится об условиях и ограничениях, чтобы было интересно сравнивать.
Предлагаю такие:
  1. Строки Utf-8 со случайной (равномерно распределенной) длиной [0, 1024). Состоят из символов, которые, после декодирования, укладываются в двухбайтный char. Почти все символы ASCII-7. Закладываться на случайность и равномерную распределенность символов нельзя
  2. Числа слева тоже случайны в интервале [0, UInt64.Max)
  3. Разделитель строк: \n
  4. Нужно уметь сравнивать строки разными компарерами. При сравнении реализаций проверяем время для Ordinal и InvariantCultureIgnoreCase.
  5. Ограничение на память "живых" объектов (мусор GC не включаем): 200Мб (должно передаваться параметром командной строки).
    • Включая 24..26-байтные заголовки у объектов в куче (для .Net) и 8-байтные ссылки на них.
    • Включая память на буферы чтения\записи файлов.
    Ограничение не слишком жесткое, можно, например, закладываться на среднюю длину строки и что почти все символы ASCII-7.

PS
Думаю, что строки в памяти можно хранить как utf-8 массивы байт. А простое их побайтное сравнение эквивалентно Ordinal сравнению, так?