Hello,<div><br></div><div>I&#39;m trying to get more performance out of my IronPython scripts inside one of my applications, and noticed I&#39;m spending the bulk of my time setting up the ScriptScope prior to execution.  My applications translates information coming from a flat file, and I use IronPython to enforce business rules on various records that I pull from my input file.  The object that I&#39;m passing to the scope is custom implementation of the ExpandoObject.</div>
<div><br></div><div>Am I doing anything out of the ordinary here, or is there a better way to get the performance I&#39;m after?  It doesn&#39;t seem like setting up the script should performance significantly slower than executing the script itself.</div>
<div><br>Here is an example of the performance results I&#39;m getting.  I&#39;m keeping track of various timings for execution time, but the script setup timer is really just stopping and starting a stopwatch before and after each call to ScriptScope.SetVariable()...</div>
<div><br></div><div><br></div><div><div>DUMPING EDIT STATS</div><div>------------------</div><div><br></div><div>Edit: SetProviderType           Count: 70291   Min: 9.927000E-001 Max: 4.922160E+001 Total: 7.656987E+004 Setup: 4.667084E+005</div>
<div>Edit: SetFeeSchedule            Count: 70291   Min: 1.572500E+000 Max: 6.547200E+001 Total: 1.067754E+005 Setup: 4.639014E+005</div><div>Edit: phDefaultNetworkCode      Count: 70291   Min: 1.900000E-002 Max: 2.413129E+002 Total: 1.618541E+003 Setup: 1.161743E+002</div>
<div>Edit: phCloneFieldList          Count: 70291   Min: 4.400000E-003 Max: 4.083400E+000 Total: 3.565259E+002 Setup: 1.113712E+002</div><div>Edit: phAssignValueToField      Count: 70291   Min: 9.700000E-003 Max: 1.777100E+000 Total: 5.765196E+002 Setup: 1.108866E+002</div>
</div><div><br></div><div><br></div><div>SetProviderType and SetFeeSchedule are both IronPython scripts, the other three are C# edits that I&#39;m passing my ExpandoObject directly to.</div><div><br></div><div>4.667 E+005 = almost 8 minutes...</div>
<div>1.108 E+002 = .1 seconds</div><div><br></div><div><br></div><div>Thanks in advance for any advice you can help me with.</div><div><br></div><div>-Cory</div><div><br></div><div><div><span class="Apple-tab-span" style="white-space:pre">        </span>class IronPythonScriptHost : PrimeEditBase {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>ScriptSource mScriptSource;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>ScriptEngine mEngine;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>ScriptScope mScope;</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>public IronPythonScriptHost(string scriptText, string ScriptName, CommandLine mCommandLine, string[] mEditParms, ScriptEngine engine)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>: base(mCommandLine, mEditParms) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>mEditName     = ScriptName;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>mIsScript     = true;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>mEngine       = engine;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>mScriptSource = mEngine.CreateScriptSourceFromString(scriptText, Microsoft.Scripting.SourceCodeKind.File);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>mScriptSource.Compile();</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>mScope = mEngine.CreateScope();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>public override void SetupEdit(dynamic editScope) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span></div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>StartSetupTimer();</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>mScope.SetVariable(&quot;PH&quot;, editScope);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>StopSetupTimer();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>public override void performEdit() {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>StartExecutionTimer();</div><div>
<span class="Apple-tab-span" style="white-space:pre">                        </span>try {</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>mScriptSource.Execute(mScope);</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>CleanupEdit();</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>} catch (Exception ex) {</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>ExceptionOperations ExcOps = mEngine.GetService&lt;ExceptionOperations&gt;();</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>throw new Exception(&quot;Exception during execution of &quot; + base.EditName + &quot;. &quot; + ex.Message + &quot;\r\n&quot; + ExcOps.FormatException(ex));</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>StopAndRecordExecutionTimer();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div></div>