Есть ли у C # Generics преимущество в производительности? - PullRequest
36 голосов
/ 22 сентября 2008

У меня есть несколько классов данных, представляющих различные объекты.

Что лучше: написание универсального класса (скажем, для печати или вывода XML) с использованием дженериков и интерфейсов или написание отдельного класса для работы с каждым классом данных?

Есть ли повышение производительности или какое-либо другое преимущество (кроме того, что оно экономит мне время на написание отдельных классов)?

Ответы [ 12 ]

2 голосов
/ 22 сентября 2008

Если вы думаете об универсальном классе, который вызывает методы для некоторого интерфейса для выполнения своей работы, это будет медленнее, чем конкретные классы, использующие известные типы, потому что вызов метода интерфейса медленнее, чем (не виртуальный) вызов функции .

Конечно, если код не является медленной частью процесса, критичного к производительности, вам следует сосредоточиться на ясности.

0 голосов
/ 27 января 2009

Мало того, что вы можете покончить с боксом, общие реализации несколько быстрее, чем неуниверсальные аналоги со ссылочными типами из-за изменения базовой реализации.

Оригиналы были разработаны с учетом конкретной модели расширения. Эта модель никогда не использовалась (и в любом случае была бы плохой идеей), но проектное решение заставило несколько методов быть виртуальными и, следовательно, не поддающимися моделированию (основываясь на текущей и прошлой оптимизации JIT в этом отношении).

Это решение было исправлено в более новых классах, но не может быть изменено в более старых классах, если оно не является потенциальным бинарным изменением.

Кроме того, итерация через foreach в List <> (а не IList <>) выполняется быстрее из-за того, что перечислитель ArrayList требует выделения кучи. По общему признанию это привело к неясной ошибке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...