IronPython Performance Report

An automated, lightweight comparison between 'IronPython 2.6' and 'Python26'
on 03/23/2010 14:25:44.

Machine Setup

  • PC
    • Manufacturer - Dell Computer Corporation
    • Model - PowerEdge 860
    • Name - MERLIN-14
  • Software
    • Operating System - Microsoft Windows NT 6.0.6002 Service Pack 2
    • CLR Version - 2.0.50727.4200
  • CPU
    • Full Name - Intel(R) Pentium(R) D CPU 2.80GHz
    • Speed - 2800
    • Number of Cores - 2
  • RAM - 2146070528
  • Disk Drive - WDC WD1600JS-75NCB3 ATA Device


HelloWorld is a typical hello world program we've written and is used to evaluate
the startup time of a Python interpreter. Lower startup times indicate better

  • No command-line flags are passed to the Python interpreters

Best Python26 HelloWorld run (out of 5 attempts): 0.0659863 seconds
Best IronPython 2.6 HelloWorld run (out of 5 attempts): 1.7428455 seconds

PyStone 1.1

PyStone is an extremely high-level benchmark distributed with CPython. In
short, running under various implementations of Python will emit
the number of PyStones (i.e., iterations) per second that can be run on a given
machine. A higher PyStone result indicates better overall performance of a Python
interpreter. The latest copy of PyStone can be found in lib\test\
(relative to CPython installation locations).

  • By default runs 50,000 passes to determine PyStones per second. The results below were generated using this default
  • Due to site caching in the Dynamic Language Runtime, IronPython performs better with more PyStone passes than the default value

Best Python26 PyStone run (out of 5 attempts): 39154.9 PyStones/second
Best IronPython 2.6 PyStone run (out of 5 attempts): 54272.5 PyStones/second

PyBench 2.0

PyBench is a collection of low-level benchmarks distributed with CPython. Whereas
PyStone can be used to discover the overall performance of the Python interpreter,
PyBench targets specific areas (e.g., the amount of time it takes to concatenate
two strings). You can find the latest version of PyBench on CPython's Subversion
source control system (e.g.,

Please note the following:
  • Much of the platform module is broken under IPy. As such, build numbers, build dates, etc had to be faked under IPy
  • The IPy garbage collector cannot be disabled. Although this puts IPy at a disadvantage, we kept it turned off for the CPy run
  • sys.setcheckinterval does not function properly under IronPython. This is another optimization CPython gets that IronPython doesn't.
  • 1 rounds and a warp factor of 1 were used.

(this=C:\SnapTemp\IronPython 2.6, other=C:\SnapTemp\Python26)
Test min run-time this min run-time other min run-time diff avg run-time this avg run-time other avg run-time diff
BuiltinFunctionCalls: 419ms 1719ms -75.6% 419ms 1719ms -75.6%
BuiltinMethodLookup: 637ms 1834ms -65.2% 637ms 1834ms -65.2%
CompareFloats: 28ms 1086ms -97.4% 28ms 1086ms -97.4%
CompareFloatsIntegers: 372ms 1334ms -72.1% 372ms 1334ms -72.1%
CompareIntegers: 27ms 848ms -96.8% 27ms 848ms -96.8%
CompareInternedStrings: 348ms 1230ms -71.7% 348ms 1230ms -71.7%
CompareLongs: 29ms 1023ms -97.2% 29ms 1023ms -97.2%
CompareStrings: 461ms 1334ms -65.4% 461ms 1334ms -65.4%
CompareUnicode: 385ms 1119ms -65.6% 385ms 1119ms -65.6%
ComplexPythonFunctionCalls: 2180ms 2364ms -7.8% 2180ms 2364ms -7.8%
ConcatStrings: 4489ms 2888ms 55.4% 4489ms 2888ms 55.4%
ConcatUnicode: 2462ms 2354ms 4.6% 2462ms 2354ms 4.6%
CreateInstances: 824ms 2022ms -59.3% 824ms 2022ms -59.3%
CreateNewInstances: 434ms 1529ms -71.6% 434ms 1529ms -71.6%
CreateStringsWithConcat: 2489ms 1126ms 121.1% 2489ms 1126ms 121.1%
CreateUnicodeWithConcat: 1120ms 1269ms -11.7% 1120ms 1269ms -11.7%
DictCreation: 2399ms 1063ms 125.8% 2399ms 1063ms 125.8%
DictWithFloatKeys: 2039ms 2956ms -31.0% 2039ms 2956ms -31.0%
DictWithIntegerKeys: 1803ms 863ms 108.9% 1803ms 863ms 108.9%
DictWithStringKeys: 1990ms 1055ms 88.6% 1990ms 1055ms 88.6%
ForLoops: 562ms 663ms -15.3% 562ms 663ms -15.3%
IfThenElse: 353ms 882ms -59.9% 353ms 882ms -59.9%
ListSlicing: 3869ms 1496ms 158.7% 3869ms 1496ms 158.7%
NestedForLoops: 640ms 1006ms -36.4% 640ms 1006ms -36.4%
NormalClassAttribute: 2930ms 1114ms 163.0% 2930ms 1114ms 163.0%
NormalInstanceAttribute: 3741ms 977ms 283.0% 3741ms 977ms 283.0%
PythonFunctionCalls: 341ms 1678ms -79.7% 341ms 1678ms -79.7%
PythonMethodCalls: 3525ms 1852ms 90.4% 3525ms 1852ms 90.4%
Recursion: 574ms 2234ms -74.3% 574ms 2234ms -74.3%
SecondImport: 1029ms 1237ms -16.8% 1029ms 1237ms -16.8%
SecondPackageImport: 1076ms 1305ms -17.6% 1076ms 1305ms -17.6%
SecondSubmoduleImport: 1559ms 1691ms -7.8% 1559ms 1691ms -7.8%
SimpleComplexArithmetic: 714ms 1330ms -46.3% 714ms 1330ms -46.3%
SimpleDictManipulation: 2087ms 1141ms 82.9% 2087ms 1141ms 82.9%
SimpleFloatArithmetic: 495ms 1277ms -61.2% 495ms 1277ms -61.2%
SimpleIntFloatArithmetic: 558ms 750ms -25.7% 558ms 750ms -25.7%
SimpleIntegerArithmetic: 526ms 747ms -29.5% 526ms 747ms -29.5%
SimpleListManipulation: 1306ms 923ms 41.5% 1306ms 923ms 41.5%
SimpleLongArithmetic: 1121ms 1248ms -10.2% 1121ms 1248ms -10.2%
SmallLists: 2415ms 1639ms 47.4% 2415ms 1639ms 47.4%
SmallTuples: 917ms 1424ms -35.6% 917ms 1424ms -35.6%
SpecialClassAttribute: 3491ms 1070ms 226.4% 3491ms 1070ms 226.4%
SpecialInstanceAttribute: 3834ms 1190ms 222.1% 3834ms 1190ms 222.1%
StringMappings: 3040ms 2352ms 29.2% 3040ms 2352ms 29.2%
StringPredicates: 1268ms 1846ms -31.3% 1268ms 1846ms -31.3%
StringSlicing: 1430ms 1601ms -10.7% 1430ms 1601ms -10.7%
TryExcept: 338ms 575ms -41.3% 338ms 575ms -41.3%
TryFinally: 1011ms 1720ms -41.2% 1011ms 1720ms -41.2%
TryRaiseExcept: 64457ms 1094ms 5792.5% 64457ms 1094ms 5792.5%
TupleSlicing: 2980ms 1501ms 98.6% 2980ms 1501ms 98.6%
UnicodeMappings: 2075ms 952ms 117.9% 2075ms 952ms 117.9%
UnicodePredicates: 1360ms 1334ms 1.9% 1360ms 1334ms 1.9%
UnicodeSlicing: 1415ms 1687ms -16.1% 1415ms 1687ms -16.1%
WithFinally: 683ms 2223ms -69.3% 683ms 2223ms -69.3%
WithRaiseExcept: 72303ms 1635ms 4323.1% 72303ms 1635ms 4323.1%
Totals: 214955ms 78408ms 174.1% 214955ms 78408ms 174.1%


Much like PyStone, is a high-level benchmark intended to give the
Python user a single result indicating the overall "goodness" factor of a Python
interpreter. This benchmark is distributed with the PyPy interpreter, although
the original version was written in BCPL by Dr. Martin Richards at Cambridge
University. Lower "Average time per iteration" results indicate better performance.

Best average time per iteration for Python26 (out of 5 attempts): 613.1
Best average time per iteration for IronPython 2.6 (out of 5 attempts): 996.85

Last edited Mar 23, 2010 at 9:43 PM by dfugate, version 1


No comments yet.