Initial project setup
DalContext.Execute() sketch shows Core idea behind the interception strategy to be implemented.
Measured base-line empty function expression -> compile -> run time rate. Got ~4000+ calls/sec on 2.4 GHz notebook Core i7.
Implementing any method interception is in progress.
- Added method metadata retrieval functionality.
Interim commit
Added support of intercepting static methods, in addition to instance methods. Found that adding non-constant parameters to methods adds about 400ms of expression compile time.
Added check of baseline performance when tests run in parallel on multiple cores.
- Renamed main classes.
- Added method signature and method metadata functionality.
- Added void method support to Disposable interceptor.
Small changes in unit test project.
Added instance.GetInterceptor(aspects).Invoke(instanceMethodExpression) way of augmented execution.
- Eliminated unnecessary return type specification on most of proxied calls.
- Replaced func<expression<func<>>> with expression<func<>>.
- Refactored method names.
- Improved disposable alloc/invoke/dispose method call pattern implementation. Now allows inferring return result type from expression, instead of stating it explicitly.
Started working on showing how to AOP AdventureWorksLT2008R2 EF (DbContext) calls.
Added baseline performance testing for direct and augmented EF calls. Found AOP adding, at worst, less than 15% of performance overhead to EF DbContext.
- Added ability for Aspects to break aspect invocation sequence.
- Added a few most important LINQ convenience shortcut methods.
Updated EF performance testing unit tests by switching them to LINQ shortcut methods.