Вызывают ли дженерики в Delphi узкие места в производительности?

недавно я разрабатывал приложение и хотел иметь коллекции нескольких типов. Я не хочу объявлять и реализовывать новый класс коллекции для его типа. Поэтому я подумал о дженериках, но не был уверен в производительности дженериков по сравнению с обычными типизированными экземплярами. Производительность-это главное, на что я смотрю. Мое приложение критично по времени, и даже потеря нескольких 100 миллисекунд также не рекомендуется.

Я использую Delphi XE3 установлены

например:

ICollectionItem = interface
  function GetID : string;
  property ID : string read GetId;
end;

TGenericCollection<T: ICollectionItem> = class
  function Add(T) : Integer;
end;

по сравнению с

TSomeClass = class(TInterfacedObject, ICollectionItem)
  function GetId : string;
end;

TSomeClassList = class
  function Add(item : TSomeClass) : Integer;
end;

1 ответов


нет узкого места производительности

Delphi дженерики являются составлен. Компилятор знает конкретные типы в compile время, и это будет лучше всего, чтобы предоставить вам лучший код, который он может. При проверке сгенерированного кода во время выполнения различий между общим и неродовым кодом не должно быть.

есть хороший шанс получить лучший код с дженериками, потому что вы, скорее всего, будете использовать готовый, эффективный, безопасный тип данные структуры. При прокатке вы, скорее всего, сократите углы, потому что давайте будем честными, написание алгоритмов сортировки, эффективное распределение и т. д. жесткий.