По мотивам - ToDo. На тему "компиляции словарей"
Пусть есть класс C, который реализует интерфейс I.
И пусть известно, что экземпляры класса C создаются ТОЛЬКО фабрикой F и кешируются в ней по ключу.
Так вот - на модели можно поставить "галку" - "C - кешируется фабрикой F", и тогда с модели генерируются специальные "пустые" версии AddRef и Release.
Клиенты их зовут, но счётчик ссылок не уменьшается и не увеличивается.
Ибо - незачем.
Объекты и так держатся фабрикой.
Выигрываем на InterlockedIncrement/InterlockedDecrement и прочих "операциях синхронизации".
А если объекты перестали держаться фабрикой - снимаем галку и у них появляются другие AddRef/Release. Непустые.
И главное, что всё прозрачно для клиентов.
Как то так...
Только вот Embarcadero с его ARC "в вену" - всю "малину портит".
А зато под Delphi 7 - всё замечательно.
Пусть есть класс C, который реализует интерфейс I.
И пусть известно, что экземпляры класса C создаются ТОЛЬКО фабрикой F и кешируются в ней по ключу.
Так вот - на модели можно поставить "галку" - "C - кешируется фабрикой F", и тогда с модели генерируются специальные "пустые" версии AddRef и Release.
Клиенты их зовут, но счётчик ссылок не уменьшается и не увеличивается.
Ибо - незачем.
Объекты и так держатся фабрикой.
Выигрываем на InterlockedIncrement/InterlockedDecrement и прочих "операциях синхронизации".
А если объекты перестали держаться фабрикой - снимаем галку и у них появляются другие AddRef/Release. Непустые.
И главное, что всё прозрачно для клиентов.
Как то так...
Только вот Embarcadero с его ARC "в вену" - всю "малину портит".
А зато под Delphi 7 - всё замечательно.
Комментариев нет:
Отправить комментарий