А что мешает сортировать массив чисел шарпом ? Сортировка, что ты предложил, реально адская синтетика. Будешь ты сортировать числа или объекты, разницы почти никакой.
CM>2. Сравнивать разные реализации — вообще довольно бессмысленно.
Послушай внимательно — мне нет интереса портировать твой код в JS. Если тебе интересно — сделай это сам по примеру, что я дал.
Здравствуйте, CoderMonkey, Вы писали:
_>>Давай посмотрим) Проведи соответствующее тестирование и выложи здесь результаты — думаю всем будет интересно. ) CM>Я в JS не особо разбираюсь. Переведи код.
Эм, а как же это ты тогда "просто писал реальный код на JS и делал сравнение. В среднем, в 10-20 раз медленнее и еще хуже по памяти.", если при этом не особо разбираешься в JS? )
Здравствуйте, alex_public, Вы писали:
_>Эм, а как же это ты тогда "просто писал реальный код на JS и делал сравнение. В среднем, в 10-20 раз медленнее и еще хуже по памяти.", если при этом не особо разбираешься в JS? )
Писал. Но вдруг я что не так делал. Так что давай, покажи как надо.
Здравствуйте, Ikemefula, Вы писали:
I>Послушай внимательно — мне нет интереса портировать твой код в JS. Если тебе интересно — сделай это сам по примеру, что я дал.
Здравствуйте, CoderMonkey, Вы писали:
I>>Послушай внимательно — мне нет интереса портировать твой код в JS. Если тебе интересно — сделай это сам по примеру, что я дал.
CM>Зато болтать языком тебе есть интерес.
Я не очень понимаю, зачем мне это надо. Пока что у меня есть вещи гораздо интереснее. В своё время у меня было куча задач на профилирование и того, и другого. Как то так.
Здравствуйте, CoderMonkey, Вы писали:
I>>Пока что у меня есть вещи гораздо интереснее.
CM>Например, писать бессмысленные бездоказательные сообщения в большом количестве.
Ога. Я тебе даже больше скажу — есть задачи, в которых JS порвет шарп дотнетный, как тузик грелку
Здравствуйте, Ikemefula, Вы писали:
I>Именно так. Копия массива создается например так [].concat(arr)
В таком случае, сортировка делается только на первом вызове, а все последующие гоняются на уже отсортированных данных. Какой идиот так бенчмарки делает?
Здравствуйте, CoderMonkey, Вы писали:
I>>Ога. Я тебе даже больше скажу — есть задачи, в которых JS порвет шарп дотнетный, как тузик грелку
CM>Балаболить все горазды. Ты код показывай.
Ты хочешь, что бы я тебе чего то подоказывал, правильно я тебя понял ?
Здравствуйте, CoderMonkey, Вы писали:
I>>Именно так. Копия массива создается например так [].concat(arr)
CM>В таком случае, сортировка делается только на первом вызове, а все последующие гоняются на уже отсортированных данных. Какой идиот так бенчмарки делает?
Я тебе дал пример кода сортировки, а не образец замеров. jsperf глючит, не дает сохранить кейсы.
Здравствуйте, CoderMonkey, Вы писали:
_>>Эм, а как же это ты тогда "просто писал реальный код на JS и делал сравнение. В среднем, в 10-20 раз медленнее и еще хуже по памяти.", если при этом не особо разбираешься в JS? ) CM>Писал. Но вдруг я что не так делал. Так что давай, покажи как надо.
Я собственно уже всё показал, со всеми измерениями и т.п. Ссылка имеется выше. Теперь твоя очередь, раз тебе не очень нравится мой вариант теста — покажи свой. )
Здравствуйте, CoderMonkey, Вы писали:
I>>Я тебе дал пример кода сортировки, а не образец замеров. jsperf глючит, не дает сохранить кейсы.
CM>Какой идиот сравнивает разные реализации?
А кто тебя к этому призывал ? Стесняюсь спросить, что будет, если я дам тебе пример кода, который твой диск стирает ?
Здравствуйте, alex_public, Вы писали:
_>Я собственно уже всё показал, со всеми измерениями и т.п. Ссылка имеется выше. Теперь твоя очередь, раз тебе не очень нравится мой вариант теста — покажи свой. )
Начнем с чего-нибудь простого.
function CreateId()
{
var res = Math.floor(Math.random() * Math.pow(10, 8));
return res.toLocaleString('en-US', {minimumIntegerDigits: 10, useGrouping:false});
}
class TestClass
{
constructor() {
this.Id = CreateId();
this.Value = CreateId();
}
}
var startInit = performance.now();
var vals = [];
for (var i = 0; i < 1000 * 1000; i++)
{
vals.push(new TestClass());
}
var endInit = performance.now();
log("Init: " + (endInit - startInit) + " msecs");
Сколько времени выполняется код и сколько отжирается памяти?
А я пока за попкорном схожу.
Здравствуйте, CoderMonkey, Вы писали:
_>>Я собственно уже всё показал, со всеми измерениями и т.п. Ссылка имеется выше. Теперь твоя очередь, раз тебе не очень нравится мой вариант теста — покажи свой. ) CM>Начнем с чего-нибудь простого. CM>
CM> function CreateId()
CM> {
CM> var res = Math.floor(Math.random() * Math.pow(10, 8));
CM> return res.toLocaleString('en-US', {minimumIntegerDigits: 10, useGrouping:false});
CM> }
CM> class TestClass
CM> {
CM> constructor() {
CM> this.Id = CreateId();
CM> this.Value = CreateId();
CM> }
CM> }
CM> var startInit = performance.now();
CM> var vals = [];
CM> for (var i = 0; i < 1000 * 1000; i++)
CM> {
CM> vals.push(new TestClass());
CM> }
CM> var endInit = performance.now();
CM> log("Init: " + (endInit - startInit) + " msecs");
CM>
CM>Сколько времени выполняется код и сколько отжирается памяти? CM>А я пока за попкорном схожу.
Ну давай начнём. ))) На моём компьютере этот код выполняется в среднем за 200 миллисекунд. Ну естественно, если заменить бредовую в данном контексте строку "toLocaleString('en-US', {minimumIntegerDigits: 10, useGrouping:false})" на эквивалентную ей по эффекту, но подходящую "toString().padStart(10, '0')".
Да, и что самое забавное, аналогичный этому коду вариант на C# (вот взял прямо твой код, закомментировал в нём вызов "QuickSort(vals, Compare);" и поменял "Guid.NewGuid().ToString().Replace("-", "")" на "Math.Floor(gen.NextDouble()*Math.Pow(10, 8)).ToString().PadLeft(10, '0')" (для полной корректности, хотя по факту эта мелочь не влияет) исполняется у меня какие-то невероятные 1600 миллисекунд!
P.S. А это у тебя так задумано, что первые разряды id всегда равны нулю или это тоже просто от неумения? )))
Здравствуйте, alex_public, Вы писали:
_>Ну давай начнём. ))) На моём компьютере этот код выполняется в среднем за 200 миллисекунд. Ну естественно, если заменить бредовую в данном контексте строку "toLocaleString('en-US', {minimumIntegerDigits: 10, useGrouping:false})" на эквивалентную ей по эффекту, но подходящую "toString().padStart(10, '0')".
Это очень интересно, потому что у меня он исполняется 30 секунд и выжирает до 7 гигов максимум. Так что, видимо, не очень то эквивалентную.