IronPython Performance Report

An automated, lightweight comparison between 'IronPython 2.0.2' and 'Python25'
on 07/21/2009 10:29:27.

Machine Setup

  • PC
    • Manufacturer - Dell Computer Corporation
    • Model - PowerEdge 860
    • Name - MERLIN-14
  • Software
    • Operating System - Microsoft Windows NT 6.0.6001 Service Pack 1
    • CLR Version - 2.0.50727.3053
  • 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 Python25 HelloWorld run (out of 5 attempts): 0.1035874 seconds
Best IronPython 2.0.2 HelloWorld run (out of 5 attempts): 3.8693947 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 Python25 PyStone run (out of 5 attempts): 38077.9 PyStones/second
Best IronPython 2.0.2 PyStone run (out of 5 attempts): 47776.4 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
  • The default number of rounds and a warp factor of 1 were used

(this=C:\SnapTemp\IronPython 2.0.2, other=C:\SnapTemp\Python25)
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: 294ms 2027ms -85.5% 307ms 2062ms -85.1%
BuiltinMethodLookup: 434ms 1834ms -76.3% 458ms 1982ms -76.9%
CompareFloats: 543ms 1102ms -50.7% 558ms 1104ms -49.4%
CompareFloatsIntegers: 91ms 1425ms -93.6% 99ms 1430ms -93.1%
CompareIntegers: 121ms 945ms -87.2% 143ms 967ms -85.2%
CompareInternedStrings: 207ms 1013ms -79.5% 228ms 1018ms -77.6%
CompareLongs: 1682ms 1173ms 43.4% 1748ms 1176ms 48.7%
CompareStrings: 367ms 1296ms -71.6% 371ms 1388ms -73.3%
CompareUnicode: 275ms 1344ms -79.5% 283ms 1353ms -79.1%
ConcatStrings: 4302ms 3199ms 34.5% 4550ms 3278ms 38.8%
ConcatUnicode: 2540ms 2956ms -14.0% 2753ms 3019ms -8.8%
CreateInstances: 793ms 1852ms -57.2% 832ms 1863ms -55.3%
CreateNewInstances: 1386ms 1536ms -9.7% 1408ms 1556ms -9.5%
CreateStringsWithConcat: 2052ms 1328ms 54.6% 2394ms 1332ms 79.7%
CreateUnicodeWithConcat: 824ms 1936ms -57.4% 909ms 1949ms -53.4%
DictCreation: 1214ms 1175ms 3.4% 1296ms 1183ms 9.5%
DictWithFloatKeys: 2147ms 3195ms -32.8% 2166ms 3209ms -32.5%
DictWithIntegerKeys: 1927ms 954ms 102.0% 1938ms 964ms 101.1%
DictWithStringKeys: 1974ms 1052ms 87.6% 1993ms 1058ms 88.4%
ForLoops: 390ms 792ms -50.7% 406ms 796ms -49.0%
IfThenElse: 322ms 1025ms -68.6% 349ms 1029ms -66.1%
ListSlicing: 3494ms 1516ms 130.5% 3585ms 1527ms 134.8%
NestedForLoops: 577ms 1130ms -48.9% 590ms 1167ms -49.5%
NormalClassAttribute: 3881ms 1284ms 202.3% 3898ms 1300ms 199.8%
NormalInstanceAttribute: 3101ms 1171ms 164.8% 3120ms 1183ms 163.7%
PythonFunctionCalls: 310ms 1572ms -80.3% 326ms 1604ms -79.7%
PythonMethodCalls: 2901ms 1982ms 46.3% 2930ms 2010ms 45.8%
Recursion: 652ms 2077ms -68.6% 663ms 2086ms -68.2%
SecondImport: 2214ms 1487ms 48.9% 2243ms 1507ms 48.8%
SecondPackageImport: 2277ms 1570ms 45.0% 2306ms 1583ms 45.7%
SecondSubmoduleImport: 3213ms 2063ms 55.8% 3253ms 2078ms 56.6%
SimpleComplexArithmetic: 622ms 1388ms -55.2% 656ms 1411ms -53.5%
SimpleDictManipulation: 2103ms 1125ms 87.0% 2126ms 1134ms 87.6%
SimpleFloatArithmetic: 386ms 1216ms -68.2% 422ms 1328ms -68.2%
SimpleIntFloatArithmetic: 480ms 969ms -50.5% 494ms 971ms -49.1%
SimpleIntegerArithmetic: 464ms 919ms -49.5% 475ms 922ms -48.5%
SimpleListManipulation: 1290ms 931ms 38.5% 1307ms 938ms 39.3%
SimpleLongArithmetic: 997ms 1260ms -20.9% 1041ms 1268ms -17.9%
SmallLists: 1370ms 1804ms -24.0% 1409ms 1813ms -22.3%
SmallTuples: 1760ms 1539ms 14.3% 1819ms 1564ms 16.3%
SpecialClassAttribute: 3694ms 1222ms 202.3% 3711ms 1234ms 200.8%
SpecialInstanceAttribute: 2992ms 2107ms 42.0% 3012ms 2116ms 42.3%
StringMappings: 2993ms 7957ms -62.4% 3049ms 8041ms -62.1%
StringPredicates: 1051ms 2837ms -63.0% 1073ms 2866ms -62.6%
StringSlicing: 1352ms 1701ms -20.5% 1519ms 1716ms -11.5%
TryExcept: 26ms 882ms -97.1% 60ms 885ms -93.2%
TryRaiseExcept: 57858ms 1283ms 4408.8% 57945ms 1296ms 4369.4%
TupleSlicing: 1810ms 1608ms 12.6% 1844ms 1617ms 14.1%
UnicodeMappings: 2340ms 1274ms 83.7% 2354ms 1280ms 83.9%
UnicodePredicates: 1205ms 1557ms -22.6% 1230ms 1586ms -22.4%
UnicodeSlicing: 1181ms 2179ms -45.8% 1214ms 2211ms -45.1%
Totals: 132484ms 84766ms 56.3% 134861ms 85956ms 56.9%


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 Python25 (out of 5 attempts): 825.2
Best average time per iteration for IronPython 2.0.2 (out of 5 attempts): 1238.64

Last edited Jul 21, 2009 at 6:17 PM by dfugate, version 1


No comments yet.