2011-01-06 6 views
3

Hier scheint etwas lustiges vor sich zu gehen. Mit IronPython 2.6.2 für .NET 4.0 erhalte ich folgendes Verhalten. Der einfachste Fall ist wie folgt:IronPython-Fehler im Zusammenhang mit langen booleschen Ausdrücken?

  1. ich die interaktive Shell
  2. ich die folgende Zeile 5 mal

    False or False or False or False or False or False or \ 
    
  3. beende ich es dann mit der folgenden Zeile

    False or False or False or False or False or False 
    
  4. starten

Während ich dies tippe, hat der Prozess cl 30 CPU-Minuten auf einem ziemlich guten Desktop und noch nicht zurückgekommen.

Wenn ich Schritt 2 um 1 reduziere, d. H. Die Zeile 4 Mal, dann kehrt sie in etwa einer Minute oder zwei zurück.

Wenn ich Stufe 2 um 2 verringern, dh. habe die Linie 3 Mal, dann kehrt sie in ungefähr einer Sekunde oder so zurück.

Was passiert also und warum?

Natürlich ist das reale Beispiel, das mich dazu veranlasst hat, dies zu isolieren, viel komplexer und nicht ganz so frivol aussehend.

Dank Akil

+0

Dieses Verhalten ist nicht in IronPython 2.6 für .NET 3.5 kompiliert – Akil

+0

Behavior bleibt bestehen, wenn der gleiche Code als IronPython in einem C# -Programm – Akil

Antwort

1

Ich würde vorschlagen, einen Fehler auf CodePlex öffnen. Was passiert hier ist, dass IronPython OrExpression AST-Knoten versucht, seinen Typ zu entdecken. Um dies zu tun, schaut es sich die linke Hand und die rechte Hand an. Wenn sie gleich sind, erzeugt OrExpression einen Ausdruck des Typs auf der linken Seite - der wiederum überprüft wird. Dieser zweite Aufruf ist meistens der Grund dafür, dass dies überproportional wächst. Durch einfaches Ändern OrExpression.cs aus:

return _left.Type == _right.Type ? _left.Type : typeof(object); 

zu:

Type lType = _left.Type; 
return lType == _right.Type ? lType : typeof(object); 

behebt das Problem.

+0

Dito für AndExpression eingebettet ausgeführt wird. Was denken Sie? – Akil

+0

Oh und BTW, Danke und wie kann ich dies als die Antwort markieren? Vielleicht habe ich noch nicht die Rechte dafür. – Akil

Verwandte Themen