<div>I'm not sure what you mean by "mScope.PH = editScope". mScope = ScriptScope and doesn'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"><<a href="mailto:dinov@microsoft.com">dinov@microsoft.com</a>></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("PH",
editScope);” <span style="font-size:11.0pt;color:#1F497D">
ends up dispatching dynamically. If you did “</span>mScope.SetVariable("PH", (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'm trying to get more performance out of my IronPython scripts inside one of my applications, and noticed I'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'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'm after? It doesn'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'm getting. I'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'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("PH", 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<ExceptionOperations>();</p>
</div>
<div>
<p class="MsoNormal"><span>
</span>throw new Exception("Exception during execution of " + base.EditName + ". " + ex.Message + "\r\n" + 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>