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

Сообщение Re[2]: Верно ли написан тест скорости выполнения от 06.02.2020 10:21

Изменено 06.02.2020 10:31 Passerby

Re[2]: Верно ли написан тест скорости выполнения
А есть ли возможность делать сортировку быстрее, как-нибудь убрав Linq?


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

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


P>>Необходимо пополнять какую-нибудь коллекцию парами string, int и после заполнения сортировать по убыванию int. Попробовал разные варианты в прилагаемом коде. Только сомнения в том, верно ли написал тест: код содержит OrderByDescending(pair => pair.Value, не будет ли отложенного выполнения уже после вывода результата?


I>1) вот это по вашему вы сортируете (по убыванию int)?:

I>
I>...
I>ardicsort[i] = ardic[i].OrderByDescending(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
I>...
I>

I>словарь (тот кокторый Dictionary< K, T >) по природе своей _не_ сортирован.
I>все совпадения случайны.
По спецификации словаря так, действительно, делать нельзя. Но пока реализация словаря выполнена в виде структуры структур, то можно.

I>2) чем бы там ни было CaseInsensitiveComparer, но вот этот код нехило нагрузит GC первым мусорным поколением:

I>
I>public class myReverserClass : IComparer
I>{
I>   int IComparer.Compare(Object x, Object y)
I>   {
I>      return ((new CaseInsensitiveComparer()).Compare(x,y ));
I>   }
I>}
I>

Какой выход?
Re[2]: Верно ли написан тест скорости выполнения
А есть ли возможность делать сортировку быстрее, как-нибудь убрав Linq?


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

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


P>>Необходимо пополнять какую-нибудь коллекцию парами string, int и после заполнения сортировать по убыванию int. Попробовал разные варианты в прилагаемом коде. Только сомнения в том, верно ли написал тест: код содержит OrderByDescending(pair => pair.Value, не будет ли отложенного выполнения уже после вывода результата?


I>1) вот это по вашему вы сортируете (по убыванию int)?:

I>
I>...
I>ardicsort[i] = ardic[i].OrderByDescending(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
I>...
I>

I>словарь (тот кокторый Dictionary< K, T >) по природе своей _не_ сортирован.
I>все совпадения случайны.
По спецификации словаря так, действительно, делать нельзя. Но пока реализация словаря выполнена в виде структуры структур, то можно. Но это вообще не принципиально. Можно не делать .ToDictionary(pair => pair.Key, pair => pair.Value);, а создать OrderedDictionary и в цикле IEnumerable заполнить его значениями. Мне гораздо интереснее можно ли саму сортировку сделать быстрее, уйти как-нибудь от Linq.

I>2) чем бы там ни было CaseInsensitiveComparer, но вот этот код нехило нагрузит GC первым мусорным поколением:

I>
I>public class myReverserClass : IComparer
I>{
I>   int IComparer.Compare(Object x, Object y)
I>   {
I>      return ((new CaseInsensitiveComparer()).Compare(x,y ));
I>   }
I>}
I>

Какой выход?