Сообщение 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>Все эти скорости без привязки к тому, сколько памяти потребовалось ничего не стоят
Да, нужно договорится об условиях и ограничениях, чтобы было интересно сравнивать.
Предлагаю такие:
PS
Думаю, что строки в памяти можно хранить как utf-8 массивы байт. А простое их побайтное сравнение эквивалентно Ordinal сравнению, так?
_FR>Здравствуйте, Shmj, Вы писали:
_FR>>>А попробуйте сгенерить файл моей же и на нём проверить?
S>>Проверил с новой версией. Общее время 13:44 с тем же файлом данных и вашими настройками для 10 Гб.
S>>Т.е. у вас быстрее чем версия gandjustas (15,5 мин), но медленнее чем artelk (6,36 мин). Хотя это все условно — artelk жестко привязался к ASCII.
_FR>А на расход памяти вы не посмотрели?
_FR>Все эти скорости без привязки к тому, сколько памяти потребовалось ничего не стоят
Да, нужно договорится об условиях и ограничениях, чтобы было интересно сравнивать.
Предлагаю такие:
- Строки Utf-8 со случайной (равномерно распределенной) длиной [0, 1024). Состоят из символов, которые, после декодирования, укладываются в двухбайтный char. Почти все символы ASCII-7. Закладываться на случайность и равномерную распределенность символов нельзя
Числа слева тоже случайны в интервале [0, UInt64.Max)
Разделитель строк: \n
Нужно уметь сравнивать строки разными компарерами. При сравнении реализаций проверяем время для Ordinal и InvariantCultureIgnoreCase.
Ограничение на память "живых" объектов (мусор GC не включаем): 200Мб.
- Включая 24..26-байтные заголовки у объектов в куче (для .Net) и 8-байтные ссылки на них.
Включая память на буферы чтения\записи файлов.
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>Все эти скорости без привязки к тому, сколько памяти потребовалось ничего не стоят
Да, нужно договорится об условиях и ограничениях, чтобы было интересно сравнивать.
Предлагаю такие:
PS
Думаю, что строки в памяти можно хранить как utf-8 массивы байт. А простое их побайтное сравнение эквивалентно Ordinal сравнению, так?
_FR>Здравствуйте, Shmj, Вы писали:
_FR>>>А попробуйте сгенерить файл моей же и на нём проверить?
S>>Проверил с новой версией. Общее время 13:44 с тем же файлом данных и вашими настройками для 10 Гб.
S>>Т.е. у вас быстрее чем версия gandjustas (15,5 мин), но медленнее чем artelk (6,36 мин). Хотя это все условно — artelk жестко привязался к ASCII.
_FR>А на расход памяти вы не посмотрели?
_FR>Все эти скорости без привязки к тому, сколько памяти потребовалось ничего не стоят
Да, нужно договорится об условиях и ограничениях, чтобы было интересно сравнивать.
Предлагаю такие:
- Строки Utf-8 со случайной (равномерно распределенной) длиной [0, 1024). Состоят из символов, которые, после декодирования, укладываются в двухбайтный char. Почти все символы ASCII-7. Закладываться на случайность и равномерную распределенность символов нельзя
Числа слева тоже случайны в интервале [0, UInt64.Max)
Разделитель строк: \n
Нужно уметь сравнивать строки разными компарерами. При сравнении реализаций проверяем время для Ordinal и InvariantCultureIgnoreCase.
Ограничение на память "живых" объектов (мусор GC не включаем): 200Мб (должно передаваться параметром командной строки).
- Включая 24..26-байтные заголовки у объектов в куче (для .Net) и 8-байтные ссылки на них.
Включая память на буферы чтения\записи файлов.
PS
Думаю, что строки в памяти можно хранить как utf-8 массивы байт. А простое их побайтное сравнение эквивалентно Ordinal сравнению, так?