SlideShare a Scribd company logo
1 of 22
Ultra Fast Dynamic Invocation in .NET with Fasterflect Buu Nguyen
Buu Nguyen Director of Technology, KMS Technology, www.kms-technology.com Lecturer, RMIT Vietnam, www.rmit.edu.vn www.buunguyen.net/blog Twitter: buunguyen
Fasterflect is an open-source .NET library that makes the task of dynamically constructing objects and invoking methods, properties, fields etc. much simpler and (up to 400x) fasterthan the standard .NET Reflection API
Agenda Overview of .NET Reflection Capabilities How Fasterflect Helps with Invocation Using Fasterflect & Benchmark The Design of Fasterflect Future Direction
.NET Reflection #1 & #3 are well addressed, can hardly improve That leaves #2…
Complicated & Slow How complicated? Lookup metadata before invoking Lookup & invoke require many parameters Hard to get right Poor support for value type How slow?   Up to 400 time slower than FF.
classPerson { privateint id; privateString name; privateint calories; privatestaticintinstanceCount; publicint Age { get; set; } publicStringNickName { get; set; } public Person(int id, string name)     { this.id = id; this.name = name; instanceCount++;     } publicvoid Eat(int calories)     { this.calories += calories;     } publicintGetCaloriesEaten()     { return calories;     } publicstaticintGetInstanceCount()     { returninstanceCount;     } }
Fasterflect Being Simpler .NET Reflection // Invoke constructor ConstructorInfoctor = type.GetConstructor( BindingFlags.Instance | BindingFlags.Public, null, CallingConventions.HasThis, new [] {typeof(int), typeof(string)}, null); objectobj = ctor.Invoke(newobject[]{10, "John"}); // Update value of 'name' & print out 'name' FieldInfo field = type.GetField("name", BindingFlags.Instance | BindingFlags.NonPublic); field.SetValue(obj, "Jane"); string name = (string)field.GetValue(obj); ,[object Object],varobj = type.Construct(10, "John"); string name = obj.SetField("name", "Jane“)                                    .GetField<string>("name");
…Fasterflect Being Simpler varobj = type.Construct(1, "John"); // Chain property & field setting obj.SetProperty("Age", 20).SetField("id", 20); Console.WriteLine(obj.GetField<int>("id")); // Set properties & fields via anonymous type obj.SetProperties(new { Age = 20, NickName = "Jane" })    .SetFields(new { id = 10, name = "Peter" }); Console.WriteLine(obj.GetField<string>("name")); // Chain method calls var calories = obj.Invoke("Eat", 2000)                   .Invoke("Eat", 3000)                   .Invoke<int>("GetCaloriesEaten"); Console.WriteLine(calories); // Invoke static method varinstanceCount = type.Invoke<int>("GetInstanceCount"); Console.WriteLine(instanceCount);
Fasterflect Being Faster Previous .NET Reflection code executed 2,000,000 iterations 23.2 seconds vs. same run for Fasterflect 2.7 seconds x9 gain isn’t impressive? Fasterflect has a weapon for performance maniacs…
Enter Cached Delegates… Step 1.  Generate delegates (once) Step 2.  Invoke What would the execution time for 2,000,000 iterations be? varctor = type.DelegateForConstruct(new[] { typeof(int), typeof(string) }); var setter = type.DelegateForSetField("name"); var getter = type.DelegateForGetField("name"); varobj = ctor(1, "John"); setter(obj, "Jane"); string name = (string)getter(obj);
Time of 2,000,000 Calls 144 ms ~160-time increase in performance compared to .NET Reflection Up to 400-time in some cases (next slide)
Method Invocation Benchmark
Portion of Full Benchmark
Fasterflect Feature Set Support both reference type & value type Object construction Get/set static/instance fields Get/set static/instance properties Invoke static/instance methods Get/set indexers Get/set array elements Handle ref/out parameters Cache API available for most operations
The Design of Fasterflect Fluent API is implemented with .NET 3.5 extension methods The hard part is huge performance gain Invocation info not available at compile time for early binding Resorting to reflection at runtime is costly Solution: runtime code generation
Runtime Code Generation We have enough information at runtime to perform invocation w/o resorting to .NET Reflection, e.g.  We can generate code like this, compile, load into memory, and invoke DirectInvoke() as need
Code Generation Approaches
3000-Feet Workflow API Delegate Cache Client invokes lookups delegate builds &  invokes stores delegate Emitter 1 Emitter 1 Engine Emitter X generates CIL
TDD is Inevitable Why? Code complexity (lots of CIL) Goal of being a user-friendly API Approach Test-first 95%+ test coverage
Future Direction Add new invocation utilities Integrate with .NET Reflection metadata Support Silverlight’s CLR and .NET 4.0 CLR Build benchmark against 4.0’s ‘dynamic’ In consideration Build on .NET 4.0’s DynamicObject Add AOP capability
Download Fasterflect 1.1 http://fasterflect.codeplex.com/ Download include Binary (.NET 3.5) Source code & CHM doc Sample code Benchmark application Unit test cases Licensed under Apache 2.0

More Related Content

What's hot

What's new in Ruby 2.0
What's new in Ruby 2.0What's new in Ruby 2.0
What's new in Ruby 2.0
Kartik Sahoo
 
Deep dive into Xtext scoping local and global scopes explained
Deep dive into Xtext scoping local and global scopes explainedDeep dive into Xtext scoping local and global scopes explained
Deep dive into Xtext scoping local and global scopes explained
Holger Schill
 
Debugging with pry
Debugging with pryDebugging with pry
Debugging with pry
Creditas
 

What's hot (20)

An Introduction to Solr
An Introduction to SolrAn Introduction to Solr
An Introduction to Solr
 
Aprendendo solid com exemplos
Aprendendo solid com exemplosAprendendo solid com exemplos
Aprendendo solid com exemplos
 
What's new in Ruby 2.0
What's new in Ruby 2.0What's new in Ruby 2.0
What's new in Ruby 2.0
 
Python Programming Essentials - M7 - Strings
Python Programming Essentials - M7 - StringsPython Programming Essentials - M7 - Strings
Python Programming Essentials - M7 - Strings
 
Bringing modern PHP development to IBM i (ZendCon 2016)
Bringing modern PHP development to IBM i (ZendCon 2016)Bringing modern PHP development to IBM i (ZendCon 2016)
Bringing modern PHP development to IBM i (ZendCon 2016)
 
JRuby 9000 - Optimizing Above the JVM
JRuby 9000 - Optimizing Above the JVMJRuby 9000 - Optimizing Above the JVM
JRuby 9000 - Optimizing Above the JVM
 
Learning puppet chapter 3
Learning puppet chapter 3Learning puppet chapter 3
Learning puppet chapter 3
 
Deep dive into Xtext scoping local and global scopes explained
Deep dive into Xtext scoping local and global scopes explainedDeep dive into Xtext scoping local and global scopes explained
Deep dive into Xtext scoping local and global scopes explained
 
Debugging with pry
Debugging with pryDebugging with pry
Debugging with pry
 
Um2010
Um2010Um2010
Um2010
 
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
 
Perl Tidy Perl Critic
Perl Tidy Perl CriticPerl Tidy Perl Critic
Perl Tidy Perl Critic
 
Using traits in PHP
Using traits in PHPUsing traits in PHP
Using traits in PHP
 
Demystifying Object-Oriented Programming - ZendCon 2016
Demystifying Object-Oriented Programming - ZendCon 2016Demystifying Object-Oriented Programming - ZendCon 2016
Demystifying Object-Oriented Programming - ZendCon 2016
 
Tech Webinar: AUMENTARE LA SCALABILITÀ DELLE WEB APP CON SERVLET 3.1 ASYNC I/O
Tech Webinar: AUMENTARE LA SCALABILITÀ DELLE WEB APP CON SERVLET 3.1 ASYNC I/OTech Webinar: AUMENTARE LA SCALABILITÀ DELLE WEB APP CON SERVLET 3.1 ASYNC I/O
Tech Webinar: AUMENTARE LA SCALABILITÀ DELLE WEB APP CON SERVLET 3.1 ASYNC I/O
 
JavaScript, Beyond the Curly Braces
JavaScript, Beyond the Curly BracesJavaScript, Beyond the Curly Braces
JavaScript, Beyond the Curly Braces
 
Better rspec 進擊的 RSpec
Better rspec 進擊的 RSpecBetter rspec 進擊的 RSpec
Better rspec 進擊的 RSpec
 
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
 
Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016
 
CoffeeScript By Example
CoffeeScript By ExampleCoffeeScript By Example
CoffeeScript By Example
 

Similar to Fasterflect

Persisting Your Objects In The Database World @ AlphaCSP Professional OSS Con...
Persisting Your Objects In The Database World @ AlphaCSP Professional OSS Con...Persisting Your Objects In The Database World @ AlphaCSP Professional OSS Con...
Persisting Your Objects In The Database World @ AlphaCSP Professional OSS Con...
Baruch Sadogursky
 
Letting In the Light: Using Solr as an External Search Component
Letting In the Light: Using Solr as an External Search ComponentLetting In the Light: Using Solr as an External Search Component
Letting In the Light: Using Solr as an External Search Component
Jay Luker
 
Java Intro
Java IntroJava Intro
Java Intro
backdoor
 
Embedded Typesafe Domain Specific Languages for Java
Embedded Typesafe Domain Specific Languages for JavaEmbedded Typesafe Domain Specific Languages for Java
Embedded Typesafe Domain Specific Languages for Java
Jevgeni Kabanov
 

Similar to Fasterflect (20)

닷넷 개발자를 위한 패턴이야기
닷넷 개발자를 위한 패턴이야기닷넷 개발자를 위한 패턴이야기
닷넷 개발자를 위한 패턴이야기
 
Rapid JCR Applications Development with Sling
Rapid JCR Applications Development with SlingRapid JCR Applications Development with Sling
Rapid JCR Applications Development with Sling
 
I Feel Pretty
I Feel PrettyI Feel Pretty
I Feel Pretty
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server Pages
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
 
Persisting Your Objects In The Database World @ AlphaCSP Professional OSS Con...
Persisting Your Objects In The Database World @ AlphaCSP Professional OSS Con...Persisting Your Objects In The Database World @ AlphaCSP Professional OSS Con...
Persisting Your Objects In The Database World @ AlphaCSP Professional OSS Con...
 
สปริงเฟรมเวิร์ค4.1
สปริงเฟรมเวิร์ค4.1สปริงเฟรมเวิร์ค4.1
สปริงเฟรมเวิร์ค4.1
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHP
 
Letting In the Light: Using Solr as an External Search Component
Letting In the Light: Using Solr as an External Search ComponentLetting In the Light: Using Solr as an External Search Component
Letting In the Light: Using Solr as an External Search Component
 
Spring training
Spring trainingSpring training
Spring training
 
Spring Capitulo 05
Spring Capitulo 05Spring Capitulo 05
Spring Capitulo 05
 
Java Intro
Java IntroJava Intro
Java Intro
 
Java 8: the good parts!
Java 8: the good parts!Java 8: the good parts!
Java 8: the good parts!
 
JavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good PartsJavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good Parts
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devices
 
Embedded Typesafe Domain Specific Languages for Java
Embedded Typesafe Domain Specific Languages for JavaEmbedded Typesafe Domain Specific Languages for Java
Embedded Typesafe Domain Specific Languages for Java
 
And the Greatest of These Is ... Rack Support
And the Greatest of These Is ... Rack SupportAnd the Greatest of These Is ... Rack Support
And the Greatest of These Is ... Rack Support
 
Wicket Next (1.4/1.5)
Wicket Next (1.4/1.5)Wicket Next (1.4/1.5)
Wicket Next (1.4/1.5)
 
Object Oreinted Approach in Coldfusion
Object Oreinted Approach in ColdfusionObject Oreinted Approach in Coldfusion
Object Oreinted Approach in Coldfusion
 
Os Leonard
Os LeonardOs Leonard
Os Leonard
 

More from Buu Nguyen (11)

On Becoming a Technical Lead
On Becoming a Technical LeadOn Becoming a Technical Lead
On Becoming a Technical Lead
 
C# 3.0 and 4.0
C# 3.0 and 4.0C# 3.0 and 4.0
C# 3.0 and 4.0
 
Stories about KMS Technology
Stories about KMS TechnologyStories about KMS Technology
Stories about KMS Technology
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 
HTML5 in IE9
HTML5 in IE9HTML5 in IE9
HTML5 in IE9
 
Dynamic Binding in C# 4.0
Dynamic Binding in C# 4.0Dynamic Binding in C# 4.0
Dynamic Binding in C# 4.0
 
ASP.NET MVC 2.0
ASP.NET MVC 2.0ASP.NET MVC 2.0
ASP.NET MVC 2.0
 
Building Scalable .NET Web Applications
Building Scalable .NET Web ApplicationsBuilding Scalable .NET Web Applications
Building Scalable .NET Web Applications
 
New Features of ASP.NET 4.0
New Features of ASP.NET 4.0New Features of ASP.NET 4.0
New Features of ASP.NET 4.0
 
C# 4.0 and .NET 4.0
C# 4.0 and .NET 4.0C# 4.0 and .NET 4.0
C# 4.0 and .NET 4.0
 
Combres
CombresCombres
Combres
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 

Fasterflect

  • 1. Ultra Fast Dynamic Invocation in .NET with Fasterflect Buu Nguyen
  • 2. Buu Nguyen Director of Technology, KMS Technology, www.kms-technology.com Lecturer, RMIT Vietnam, www.rmit.edu.vn www.buunguyen.net/blog Twitter: buunguyen
  • 3. Fasterflect is an open-source .NET library that makes the task of dynamically constructing objects and invoking methods, properties, fields etc. much simpler and (up to 400x) fasterthan the standard .NET Reflection API
  • 4. Agenda Overview of .NET Reflection Capabilities How Fasterflect Helps with Invocation Using Fasterflect & Benchmark The Design of Fasterflect Future Direction
  • 5. .NET Reflection #1 & #3 are well addressed, can hardly improve That leaves #2…
  • 6. Complicated & Slow How complicated? Lookup metadata before invoking Lookup & invoke require many parameters Hard to get right Poor support for value type How slow? Up to 400 time slower than FF.
  • 7. classPerson { privateint id; privateString name; privateint calories; privatestaticintinstanceCount; publicint Age { get; set; } publicStringNickName { get; set; } public Person(int id, string name) { this.id = id; this.name = name; instanceCount++; } publicvoid Eat(int calories) { this.calories += calories; } publicintGetCaloriesEaten() { return calories; } publicstaticintGetInstanceCount() { returninstanceCount; } }
  • 8.
  • 9. …Fasterflect Being Simpler varobj = type.Construct(1, "John"); // Chain property & field setting obj.SetProperty("Age", 20).SetField("id", 20); Console.WriteLine(obj.GetField<int>("id")); // Set properties & fields via anonymous type obj.SetProperties(new { Age = 20, NickName = "Jane" }) .SetFields(new { id = 10, name = "Peter" }); Console.WriteLine(obj.GetField<string>("name")); // Chain method calls var calories = obj.Invoke("Eat", 2000) .Invoke("Eat", 3000) .Invoke<int>("GetCaloriesEaten"); Console.WriteLine(calories); // Invoke static method varinstanceCount = type.Invoke<int>("GetInstanceCount"); Console.WriteLine(instanceCount);
  • 10. Fasterflect Being Faster Previous .NET Reflection code executed 2,000,000 iterations 23.2 seconds vs. same run for Fasterflect 2.7 seconds x9 gain isn’t impressive? Fasterflect has a weapon for performance maniacs…
  • 11. Enter Cached Delegates… Step 1. Generate delegates (once) Step 2. Invoke What would the execution time for 2,000,000 iterations be? varctor = type.DelegateForConstruct(new[] { typeof(int), typeof(string) }); var setter = type.DelegateForSetField("name"); var getter = type.DelegateForGetField("name"); varobj = ctor(1, "John"); setter(obj, "Jane"); string name = (string)getter(obj);
  • 12. Time of 2,000,000 Calls 144 ms ~160-time increase in performance compared to .NET Reflection Up to 400-time in some cases (next slide)
  • 14. Portion of Full Benchmark
  • 15. Fasterflect Feature Set Support both reference type & value type Object construction Get/set static/instance fields Get/set static/instance properties Invoke static/instance methods Get/set indexers Get/set array elements Handle ref/out parameters Cache API available for most operations
  • 16. The Design of Fasterflect Fluent API is implemented with .NET 3.5 extension methods The hard part is huge performance gain Invocation info not available at compile time for early binding Resorting to reflection at runtime is costly Solution: runtime code generation
  • 17. Runtime Code Generation We have enough information at runtime to perform invocation w/o resorting to .NET Reflection, e.g. We can generate code like this, compile, load into memory, and invoke DirectInvoke() as need
  • 19. 3000-Feet Workflow API Delegate Cache Client invokes lookups delegate builds & invokes stores delegate Emitter 1 Emitter 1 Engine Emitter X generates CIL
  • 20. TDD is Inevitable Why? Code complexity (lots of CIL) Goal of being a user-friendly API Approach Test-first 95%+ test coverage
  • 21. Future Direction Add new invocation utilities Integrate with .NET Reflection metadata Support Silverlight’s CLR and .NET 4.0 CLR Build benchmark against 4.0’s ‘dynamic’ In consideration Build on .NET 4.0’s DynamicObject Add AOP capability
  • 22. Download Fasterflect 1.1 http://fasterflect.codeplex.com/ Download include Binary (.NET 3.5) Source code & CHM doc Sample code Benchmark application Unit test cases Licensed under Apache 2.0