diff options
Diffstat (limited to 'src/GraphicObjects')
| -rw-r--r-- | src/GraphicObjects/GraphicObject.cs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/GraphicObjects/GraphicObject.cs b/src/GraphicObjects/GraphicObject.cs index d5f0e295..610d97f1 100644 --- a/src/GraphicObjects/GraphicObject.cs +++ b/src/GraphicObjects/GraphicObject.cs @@ -428,7 +428,13 @@ namespace Crow Interface.DefaultValuesLoader[thisType.FullName] (this); return; } - + + //Reflexion being very slow compared to dyn method or delegates, + //I compile the initial values coded in the CustomAttribs of the class, + //all other instance of this type would not longer use reflexion to init properly + //but will fetch the dynamic initialisation method compiled for this precise type + //TODO:measure speed gain. + #region Delfault values Loading dynamic compilation DynamicMethod dm = null; ILGenerator il = null; @@ -554,6 +560,7 @@ namespace Crow il.Emit (OpCodes.Callvirt, pi.GetSetMethod ()); } il.Emit(OpCodes.Ret); + #endregion Interface.DefaultValuesLoader[thisType.FullName] = (Interface.loadDefaultInvoker)dm.CreateDelegate(typeof(Interface.loadDefaultInvoker)); Interface.DefaultValuesLoader[thisType.FullName] (this); |