|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.02.2012, 16:47 | #1 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Упаковка структур
Я крут как Чак Норрис. Сейчас изучаю проект своего начальника на 1000 строк, представляющий собой оптимизированный SortedList. Начинался он так:
Код:
Код:
А всё вот из-за чего. Эта коллекция вызывала метод TKey.CompareTo(object), при этом второй операнд сравнения каждый раз приводился к object. Для совместимости структур и ссылочных типов дотнет делает так называемую упаковку (boxing), которая сопровождается выделением памяти и копированием туда структуры (чтобы вместо структуры работать с ссылкой на неё). А поскольку лист сортированный, и сравнение используется постоянно, то эта коллекция постоянно гоняла упаковку-распаковку. Указав IComparable<TKey> я дал понять, что оба операнда сравнения всегда будут одинакового нессылочного типа, и все действия можно делать напрямую, без упаковки. P. S. это напомнило мне о законе дырявых абстракций. Последний раз редактировалось ds.Dante; 15.02.2012 в 17:39. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |