Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 16:47   #1
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию Упаковка структур

Я крут как Чак Норрис. Сейчас изучаю проект своего начальника на 1000 строк, представляющий собой оптимизированный SortedList. Начинался он так:
Код:
public class PieList<TKey, TValue>
        where TKey : struct, IComparable
{
...
Я добавил <TKey>, чтобы получилось вот так:
Код:
public class PieList<TKey, TValue>
        where TKey : struct, IComparable<TKey>
{
...
и эта коллекция стала работать на 40% быстрее.

А всё вот из-за чего. Эта коллекция вызывала метод TKey.CompareTo(object), при этом второй операнд сравнения каждый раз приводился к object. Для совместимости структур и ссылочных типов дотнет делает так называемую упаковку (boxing), которая сопровождается выделением памяти и копированием туда структуры (чтобы вместо структуры работать с ссылкой на неё). А поскольку лист сортированный, и сравнение используется постоянно, то эта коллекция постоянно гоняла упаковку-распаковку.

Указав IComparable<TKey> я дал понять, что оба операнда сравнения всегда будут одинакового нессылочного типа, и все действия можно делать напрямую, без упаковки.

P. S. это напомнило мне о законе дырявых абстракций.

Последний раз редактировалось ds.Dante; 15.02.2012 в 17:39.
ds.Dante вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3D упаковка elpilasgsm Помощь студентам 0 06.11.2011 00:22
Упаковка программы daimon7777 Помощь студентам 8 03.03.2011 18:44
двумерная упаковка (2dbpp) AsPin Помощь студентам 0 09.09.2010 23:12
Упаковка БД Serge77 БД в Delphi 1 02.06.2009 11:58