<div>I&#39;m not sure what you mean by &quot;mScope.PH = editScope&quot;.  mScope = ScriptScope and doesn&#39;t allow dynamic properties. </div><div><br></div><div>On the other hand, thanks for the suggestion with the object cast.  That gave brought my setup performance up to par with the native C# edits!</div>
<div><br></div><div>Edit: SetProviderType           Count: 70291   Min: 9.866000E-001 Max: 5.393440E+001 Total: 6.684688E+004 Setup: 1.904770E+002</div><div>Edit: SetFeeSchedule            Count: 70291   Min: 1.229300E+000 Max: 6.506160E+001 Total: 9.587090E+004 Setup: 1.747695E+002</div>
<div>Edit: phDefaultNetworkCode      Count: 70291   Min: 9.700000E-003 Max: 2.347088E+002 Total: 1.154772E+003 Setup: 1.156382E+002</div><div>Edit: phCloneFieldList          Count: 70291   Min: 3.200000E-003 Max: 4.007700E+000 Total: 2.727729E+002 Setup: 1.137180E+002</div>
<div>Edit: phAssignValueToField      Count: 70291   Min: 4.400000E-003 Max: 1.205800E+000 Total: 4.475063E+002 Setup: 1.152221E+002</div><br><div class="gmail_quote">On Thu, Aug 12, 2010 at 11:42 AM, Dino Viehland <span dir="ltr">&lt;<a href="mailto:dinov@microsoft.com">dinov@microsoft.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">I’d suggest doing mScope.PH = editScope.  That will create a rule which will get cached and will generally run faster than passing the string directly. 
</span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">The only other thing I can think of is maybe there’s something odd w/ rule being produced because “editScope” is a dynamic object in SetupEdit so “</span>mScope.SetVariable(&quot;PH&quot;,
 editScope);” <span style="font-size:11.0pt;color:#1F497D">
ends up dispatching dynamically.  If you did “</span>mScope.SetVariable(&quot;PH&quot;, (object)editScope);”<span style="font-size:11.0pt;color:#1F497D"> it would dispatch statically.</span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">If neither of those solutions helps I can see if I can look deeper and see if I can repro it.  There were some issues w/ IronPython 2.6 where this was really
 slow but they should have been fixed w/ 2.6.1.</span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a> [mailto:<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>]
<b>On Behalf Of </b>Cory Brostowicz<br>
<b>Sent:</b> Thursday, August 12, 2010 7:34 AM<br>
<b>To:</b> <a href="mailto:users@lists.ironpython.com" target="_blank">users@lists.ironpython.com</a><br>
<b>Subject:</b> [IronPython] ScriptScope.SetVariable() performance</span></p>
</div>
</div><div><div></div><div class="h5">
<p class="MsoNormal"> </p>
<p class="MsoNormal">Hello,</p>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">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.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">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.</p>

</div>
<div>
<p class="MsoNormal"><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()...</p>

</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<div>
<p class="MsoNormal">DUMPING EDIT STATS</p>
</div>
<div>
<p class="MsoNormal">------------------</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Edit: SetProviderType           Count: 70291   Min: 9.927000E-001 Max: 4.922160E+001 Total: 7.656987E+004 Setup: 4.667084E+005</p>
</div>
<div>
<p class="MsoNormal">Edit: SetFeeSchedule            Count: 70291   Min: 1.572500E+000 Max: 6.547200E+001 Total: 1.067754E+005 Setup: 4.639014E+005</p>
</div>
<div>
<p class="MsoNormal">Edit: phDefaultNetworkCode      Count: 70291   Min: 1.900000E-002 Max: 2.413129E+002 Total: 1.618541E+003 Setup: 1.161743E+002</p>
</div>
<div>
<p class="MsoNormal">Edit: phCloneFieldList          Count: 70291   Min: 4.400000E-003 Max: 4.083400E+000 Total: 3.565259E+002 Setup: 1.113712E+002</p>
</div>
<div>
<p class="MsoNormal">Edit: phAssignValueToField      Count: 70291   Min: 9.700000E-003 Max: 1.777100E+000 Total: 5.765196E+002 Setup: 1.108866E+002</p>
</div>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">SetProviderType and SetFeeSchedule are both IronPython scripts, the other three are C# edits that I&#39;m passing my ExpandoObject directly to.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">4.667 E+005 = almost 8 minutes...</p>
</div>
<div>
<p class="MsoNormal">1.108 E+002 = .1 seconds</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">Thanks in advance for any advice you can help me with.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">-Cory</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<div>
<p class="MsoNormal"><span>          </span>class IronPythonScriptHost : PrimeEditBase {</p>
</div>
<div>
<p class="MsoNormal"><span>                      </span>ScriptSource mScriptSource;</p>
</div>
<div>
<p class="MsoNormal"><span>                      </span>ScriptEngine mEngine;</p>
</div>
<div>
<p class="MsoNormal"><span>                      </span>ScriptScope mScope;</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal"><span>                      </span>public IronPythonScriptHost(string scriptText, string ScriptName, CommandLine mCommandLine, string[] mEditParms, ScriptEngine engine)</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>: base(mCommandLine, mEditParms) {</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>mEditName     = ScriptName;</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>mIsScript     = true;</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>mEngine       = engine;</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>mScriptSource = mEngine.CreateScriptSourceFromString(scriptText, Microsoft.Scripting.SourceCodeKind.File);</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>mScriptSource.Compile();</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>mScope = mEngine.CreateScope();</p>
</div>
<div>
<p class="MsoNormal"><span>                      </span>}</p>
</div>
<div>
<p class="MsoNormal"><span>                      </span>public override void SetupEdit(dynamic editScope) {</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span></p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>StartSetupTimer();</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>mScope.SetVariable(&quot;PH&quot;, editScope);</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>StopSetupTimer();</p>
</div>
<div>
<p class="MsoNormal"><span>                      </span>}</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal"><span>                      </span>public override void performEdit() {</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>StartExecutionTimer();</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>try {</p>
</div>
<div>
<p class="MsoNormal"><span>                                             
</span>mScriptSource.Execute(mScope);</p>
</div>
<div>
<p class="MsoNormal"><span>                                             
</span>CleanupEdit();</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>} catch (Exception ex) {</p>
</div>
<div>
<p class="MsoNormal"><span>                                             
</span>ExceptionOperations ExcOps = mEngine.GetService&lt;ExceptionOperations&gt;();</p>
</div>
<div>
<p class="MsoNormal"><span>                                             
</span>throw new Exception(&quot;Exception during execution of &quot; + base.EditName + &quot;. &quot; + ex.Message + &quot;\r\n&quot; + ExcOps.FormatException(ex));</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>}</p>
</div>
<div>
<p class="MsoNormal"><span>                                 
</span>StopAndRecordExecutionTimer();</p>
</div>
<div>
<p class="MsoNormal"><span>                      </span>}</p>
</div>
<div>
<p class="MsoNormal"><span>          </span>}</p>
</div>
</div>
</div></div></div>
</div>
</div>

<br>_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br></blockquote></div><br>