У меня есть класс, который автоматически генерируется с почти 7000 методов (не говоря уже о содержании или обосновании). Я хотел бы создать для него динамический прокси.
Мне известны два варианта:
- Время выполнения прокси с использованием
RealProxy.GetTransparentProxy()
- Скомпилированный прокси, генерируемый во время выполнения с
Castle.DynamicProxy.ProxyGenerator
Я хотел бы изучить второй вариант. И вот мой код:
public class DynamicProxyFactory
{
public static readonly DynamicProxyFactory Instance = new DynamicProxyFactory();
private readonly ProxyGenerator m_generator;
private DynamicProxyFactory()
{
m_generator = new ProxyGenerator();
}
public TInterface GetProxy<TInterface>(TInterface target, IInterceptor interceptor)
{
Assert.IsTrue(typeof(TInterface).IsInterface);
var sw = Stopwatch.StartNew();
try
{
return (TInterface) m_generator.CreateInterfaceProxyWithTargetInterface(typeof(TInterface), target, interceptor);
}
finally
{
Trace.WriteLine($"Dynamic proxy generation tool {sw.Elapsed}");
}
}
}
Код работает, но первоначальная стоимость генерации прокси довольно высока - он измеряется за считанные минуты. Я понимаю, 7000 методов - это не шутка.
Какие есть варианты для улучшения производительности? В конце концов, не все 7000 методов вызываются одновременно. Так что, если бы я мог лениво генерировать прокси-методы по требованию, это было бы огромной победой. Является ли это возможным? Что-то, чего мне здесь не хватает (кроме того факта, что у меня 7000 методов, что на данный момент является данностью)?
Может быть, я должен использовать другую реализацию прокси?