<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I think we are thrashing the hash code call site in
CommonDictionaryStorage.HashSite._HashSite.&nbsp; Alternately it could be the equals
call site in PythonContext._equalRetBoolSite.&nbsp; &nbsp;&nbsp;Similar to the property issue
you can look at the call site object and see if it&#8217;s going to the fixed
read-only EmptyRuleSet.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>We can probably add 2 sites which are per-dictionary but we
might need to do something more clever as that could regress general dictionary
perf.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>The DLR team is going to be looking into general issues with
understanding what&#8217;s going on with call sites.&nbsp; Yesterday I pointed out
performance investigations as being something important for them to look at.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<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;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
users-bounces@lists.ironpython.com [mailto:users-bounces@lists.ironpython.com] <b>On
Behalf Of </b>Glenn Jones<br>
<b>Sent:</b> Tuesday, January 06, 2009 6:07 AM<br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> [IronPython] Weird performance issue<o:p></o:p></span></p>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Hi all,<br>
<br>
More from the Resolver One upgrade:<br>
We are seeing several performance failures in our tests, which we expect
because the performance profile of IPy2 is different to IPy1. There is one that
is perplexing and we hope that someone can give us some insight into possible
causes for us to investigate.<br>
<br>
One of our performance tests only fails when it is preceded by other tests.
There is (as far as we can tell) no shared state between the tests. After much
poking around, we discovered that replacing a set with a list caused the
performance to improve from ~700ms down to ~100ms. We have been unable get a
minimal repro, so far. Here's a little more detail on the how the code works:<br>
<br>
class Thing(object):<br>
&nbsp;&nbsp;&nbsp; def run(arg1, arg2):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * do some stuff<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = set()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * do stuff that populates s<br>
&nbsp; &nbsp; &nbsp; &nbsp; return list(s) <br>
<br>
We create a Thing and call run so that the set contains an entry, if we then
create a new Thing and call the run method it takes 10 times longer than
expected.<br>
If we change s = set to s = [] (and convert s.add to s.append, where
appropriate), and do the same as above, the second call to run behaves as we
expect. There is (at least in our code) nothing shared between the first call
to run and the second call.<br>
<br>
Does anyone have any ideas about where we can look to work out what's
happening? Any suggestions for ways to diagnose this?<br>
<br>
Thanks<br>
Glenn &amp; Kamil <o:p></o:p></p>

</div>

</body>

</html>