стоимость .net динамических прокси - PullRequest
1 голос
/ 27 апреля 2011

Какова стоимость использования динамических прокси?

Я не хочу загромождать свой проект интерфейсными реализациями, поэтому я рассматриваю возможность использования динамических прокси-серверов, созданных некоторыми сторонними библиотеками, такими как LinFu, Castle, Unity и т. Д. Они генерируют один экземпляр для интерфейса или я получаю один для каждого позвонить.

Это веб-приложение, в чем проблема производительности в долгосрочной перспективе.

Я также использую EF 4.1 (CTP5 на данный момент), так что если я сам создаю прокси-классы, это заставляет меня задуматься, могу ли я использовать собственные инструменты создания динамического прокси EF.

P.S. да, мои интерфейсы реализуются конкретными классами наряду с другими интерфейсами и базовыми классами, но иногда мне нужна только его интерфейсная часть, а не дополнительные компоненты, которые поставляются с конкретным классом.

Все интерфейсы объявляют только некоторую часть POCO EF4.1. Так что просто добытчики и сеттеры.

Ответы [ 2 ]

1 голос
/ 29 июня 2011

с открытым исходным кодом Impromptu-Interface , требует c # 4.0 и создает облегченный тип прокси-сервера для каждой используемой комбинации интерфейса и типа реализации и сохраняет их в кэше.

Таким образом, создание интерфейсного прокси вокруг данной реализации (ExpandoObject считается одним типом независимо от того, как вы его настроили) будет стоить единовременную стоимость создания типа прокси, Activator.CreateInstance за каждый раз, когда вы создаете прокси (что неплохо), и для каждого вызова будет статический вызов, который вы бы сделали без прокси + динамический вызов dlr, который очень оптимизирован благодаря Microsoft.

0 голосов
/ 27 апреля 2011

Похоже, вам нужно больше заглушки, а не динамического прокси. Возможно, вы захотите взглянуть на Moq . Насколько я знаю, каждый раз, когда вы создаете макет, создается новый экземпляр, но не знаю, хранит ли он внутри себя какой-то тип кеша. Имейте в виду, поскольку это библиотека, предназначенная для модульных тестов, поэтому использование такого рода, вероятно, будет неортодоксальным.

...