Changeset 2059


Ignore:
Timestamp:
Nov 3, 2010, 7:56:29 PM (11 years ago)
Author:
kopal
Message:

some optimizations -> the reflected methods of input/output connectors will be cached now to avoid too much reflection and to speed up the ExecutionEngine

Location:
trunk/CrypPlugins/WorkspaceManager
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/Execution/ExecutionEngine.cs

    r1977 r2059  
    433433                        if (connectorModel.IsDynamic)
    434434                        {
    435                             MethodInfo propertyInfo = PluginModel.Plugin.GetType().GetMethod(connectorModel.DynamicSetterName);
    436                             propertyInfo.Invoke(PluginModel.Plugin, new object[] { connectorModel.PropertyName, connectorModel.Data });
     435                       
     436                            if(connectorModel.method == null)
     437                            {
     438                                connectorModel.method = PluginModel.Plugin.GetType().GetMethod(connectorModel.DynamicSetterName);
     439                            }
     440                            connectorModel.method.Invoke(PluginModel.Plugin, new object[] { connectorModel.PropertyName, connectorModel.Data });
    437441                        }
    438442                        else
    439443                        {
    440                             PropertyInfo propertyInfo = PluginModel.Plugin.GetType().GetProperty(connectorModel.PropertyName);
    441                             propertyInfo.SetValue(PluginModel.Plugin, connectorModel.Data, null);
     444                            if (connectorModel.property == null)
     445                            {
     446                                connectorModel.property = PluginModel.Plugin.GetType().GetProperty(connectorModel.PropertyName);
     447                            }
     448                            connectorModel.property.SetValue(PluginModel.Plugin, connectorModel.Data, null);
    442449                        }
    443450                    }
  • trunk/CrypPlugins/WorkspaceManager/Model/ConnectorModel.cs

    r1929 r2059  
    4141        [NonSerialized]
    4242        private volatile bool hasData = false;
    43 
     43       
    4444        /// <summary>
    4545        /// Name of the Connector type
     
    5454
    5555        #region public members
     56
     57        /// <summary>
     58        /// The method to get/set the value of the input/output represented by this connectorModel
     59        /// This is needed, if we have a dynamic input/output
     60        /// </summary>
     61        [NonSerialized]
     62        public MethodInfo method = null;
     63
     64        /// <summary>
     65        /// The property of the plugin behind this connectorModel
     66        /// </summary>     
     67        [NonSerialized]
     68        public PropertyInfo property = null;
     69
    5670
    5771        /// <summary>
     
    225239                if (IsDynamic)
    226240                {
    227                     data = sender.GetType().GetMethod(DynamicGetterName).Invoke(sender, new object[] { this.PropertyName });
     241                    if (method == null)
     242                    {
     243                        method = sender.GetType().GetMethod(DynamicGetterName);
     244                    }
     245                    data = method.Invoke(sender, new object[] { this.PropertyName });
     246                   
    228247                }
    229248                else
    230249                {
    231                     data = sender.GetType().GetProperty(propertyChangedEventArgs.PropertyName).GetValue(sender, null);
     250                    if (property == null)
     251                    {
     252                        property = sender.GetType().GetProperty(propertyChangedEventArgs.PropertyName);
     253                    }
     254                    data = property.GetValue(sender, null);
    232255                }
    233256
Note: See TracChangeset for help on using the changeset viewer.