рдЖрдЗрдбрд┐рдпрд╛ рдЬрд╛рд╡рд╛ рдмрдирд╛рдо .рдиреЗрдЯ рдмрдирд╛рдо рдореЛрдиреЛ
рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХрд╛ рдмрд╣реБрдд рд╡рд┐рдЪрд╛рд░ .Net рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рд╡рд┐рд░реЛрдз рдХреЗ рдХрд╛рд░рдг рдЖрдпрд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдЗрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдпрдерд╛рд╕рдВрднрд╡ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдлрд┐рд░ рджрд┐рд▓рдЪрд╕реНрдк рдУрдкрдирд╕реЛрд░реНрд╕ рд╡рд┐рдХрд╛рд╕ рдореЛрдиреЛ (рдиреЗрдЯ рдХрд╛ рдореБрдлреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рджреЗрдЦрдиреЗ рдореЗрдВ рдЖрдпрд╛, рдФрд░ред рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдЙрд╕реА рд╕рдордп рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП рдЧрдПред рддрджрдиреБрд╕рд╛рд░, рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рджреЛ рд╕рдорд╛рди рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реА # рдореЗрдВ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИрдВ, рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб Google рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
http://code.google.com/p/dotnet-java-benchmark/source/checkoutрдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡рд┐рднрд┐рдиреНрди рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдиреЗ рднрд╛рдЧ рд▓рд┐рдпрд╛:
- Microsoft .net 4.0 (рд╡рд┐рдВрдбреЛрдЬ 7)
- рдУрд░реЗрдХрд▓ рдЬрд╛рд╡рд╛ рдПрд╕рдИ рд╕рдВрд╕реНрдХрд░рдг 6 рдЕрдкрдбреЗрдЯ 24 (рд╡рд┐рдВрдбреЛрдЬ 7)
- рдУрд░реЗрдХрд▓ рдЬрд╛рд╡рд╛ рдПрд╕рдИ рд╕рдВрд╕реНрдХрд░рдг 6 рдЕрдкрдбреЗрдЯ 24 (рд▓рд┐рдирдХреНрд╕ 2.6.35.27 рдЙрдмрдВрдЯреВ 10.10)
- рдиреЛрд╡реЗрд▓ рдореЛрдиреЛ 2.11 (рд▓рд┐рдирдХреНрд╕ 2.6.35.27 рдЙрдмрдВрдЯреВ 10.10)
рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдХреЛрдИ рдЯреНрдпреВрдирд┐рдВрдЧ, рдУрд╡рд░рдХреНрд▓реЙрдХрд┐рдВрдЧ рдпрд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмрд╕ рд▓реЗрдЯреЗрд╕реНрдЯ OS рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рджрд┐рдпрд╛ рдЧрдпрд╛ред
рдкрд░реАрдХреНрд╖рдг рдореЗрд░реЗ рдкрд╕реНрдд рд▓реИрдкрдЯреЙрдк рдбреЗрд▓ рдЗрдВрд╕реНрдкрд┐рд░реЗрд╢рди 6400 рдЗрдВрдЯреЗрд▓ рдХреЛрд░ рдбреБрдУ T2300 1.66 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬ 1.5 рдЬреАрдмреА рд░реИрдо рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░реЛрд╕реЗрд╕рд░ 32-рдмрд┐рдЯ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдЯреЗрд╕реНрдЯ рдХреЗ рдХрдИ рд╕рдореВрд╣ рд╣реЛрддреЗ рд╣реИрдВ:
- рдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди
- рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдкреАрдврд╝реА
- рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
- рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
- рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг
рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдЗрдХреНрд░реЛрдЯреЗрд╕реНрдЯ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рддрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдФрд╕рдд рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдкреВрд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ 10 рдмрд╛рд░ рдЪрдХреНрд░реАрдп рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдЯрд┐рд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╕рднреА рдкрд░рд┐рдгрд╛рдо рдлрд┐рд░ рд╕реЗ рдФрд╕рдд рдереЗред рдкреВрд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдЦрдкрдд рдХреА рдЧрдИ рдЕрдзрд┐рдХрддрдо рдореЗрдореЛрд░реА рдХрд╛ рдЕрдиреБрдорд╛рди рднреА рд▓рдЧрднрдЧ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЬрд╛рд╡рд╛
рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХреНрд▓рд┐рдкреНрд╕ рдЖрдИрдбреАрдИ рдореЗрдВ рдЬрд╛рд╡рд╛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрдм рдЗрд╕реЗ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдмрд┐рд▓реНрдХреБрд▓ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╛рд╡рд╛ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдореЗрдореЛрд░реА рдЖрдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 768 рдПрдордмреА рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдерд╛ред рджреЛрдиреЛрдВ рдЬрд╛рд╡рд╛ рдорд╢реАрдиреЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реБрдИрдВ:
-Xms32m -Xmx768m
C#
.Net Mono Visual Studio , Mono, int.TryParse(), . int.TryParse() int.Parse() , Linux MonoDevelop ( ). , . , , ( ) Linux .
Mono GC
, , . , Mono
--desktop (Currently this sets the GC system to avoid expanding the heap as much as possible at the expense of slowing down garbage collection a bit).
--gc : Boehm SGen, , Mono. 2.10.1, Ubuntu 10.10 2.6.7. : Git 2.11, . TryParse() , exe Windows Mono , . Boehm, SGen. Mono :
--desktop --gc=sgen
. Y .
, , .
namespace DotNetPerformance.Math
{
public class MathTestParams
{
public static readonly int iterationCount = 5000000;
}
class Div10Test : SomeTest
{
public Div10Test()
{
_name = " 10";
_iterationCount = MathTestParams.iterationCount * 10;
}
public override void Do()
{
StartTiming();
for (int i = 0; i < _iterationCount; ++i)
{
int x = i / 10;
}
StopTiming();
}
}
class SinTest : SomeTest
{
public SinTest()
{
_name = "";
_iterationCount = MathTestParams.iterationCount * 5;
}
public override void Do()
{
double val = 0;
double dt = System.Math.PI * 2;
dt /= _iterationCount;
StartTiming();
for (int i = 0; i < _iterationCount; ++i)
{
double x = System.Math.Sin(val);
val += dt;
}
StopTiming();
}
}
...
}

.Net ( ), , , 10, - , . . , .Net Mono. Mono . Java . Java Linux Windows .
namespace DotNetPerformance.RandomTests
{
public class RandomTestParams
{
public static readonly int count = 10000000;
}
class IntRandomTest : SomeTest
{
public IntRandomTest()
{
_name = " int";
_iterationCount = RandomTestParams.count;
}
private Random rnd = new Random();
public override void Do()
{
StartTiming();
for (int i = 0; i < _iterationCount; ++i)
{
int x = rnd.Next();
}
StopTiming();
}
}
...
}

, , , , . .Net , Mono .
namespace DotNetPerformance.ArraysTests
{
public class ArrayTestParams
{
public static readonly int arraySize = 50000000;
}
class ArrayIntAccessTest : SomeTest
{
public ArrayIntAccessTest()
{
_name = "int[] ";
_iterationCount = ArrayTestParams.arraySize;
}
public override void Do()
{
int[] array = null;
while (array == null)
{
try
{
array = new int[_iterationCount];
}
catch (OutOfMemoryException)
{
_iterationCount /= 2;
Console.WriteLine("!! ");
}
}
for (int i = 0; i < array.Length; ++i)
{
array[i] = i;
}
StartTiming();
for (int i = 0; i 0; тАУi)
{
int x = array[i];
}
StopTiming();
}
}
...
}

.Net , Java .
namespace DotNetPerformance.CollectionsTests
{
class ListTestParams
{
public static readonly int ListInsertRemoveSize = 500000;
public static readonly int ListAccessSize = 2000000;
}
class DynamicArrayInsertRemoveTest : SomeTest
{
public DynamicArrayInsertRemoveTest()
{
_name = "DynamicArray ";
_iterationCount = ListTestParams.ListInsertRemoveSize / 10;
}
public override void Do()
{
List list = new List();
StartTiming();
for (int i = 0; i 0)
{
list.RemoveAt(0);
}
StopTiming();
}
}
...
}

.Net, Java 4 , Mono . Java , Java , / .
namespace DotNetPerformance.StringConversions
{
public class StringConversionsTestParams
{
public static readonly int iterationCount = 10000000;
}
class IntParseTest : SomeTest
{
public IntParseTest()
{
_name = " int";
_iterationCount = StringConversionsTestParams.iterationCount / 10;
}
public override void Do()
{
string[] arr = new string[_iterationCount];
for (int i = 0; i < arr.Length; ++i)
{
arr[i] = i.ToString();
}
StartTiming();
for (int i = 0; i < arr.Length; ++i)
{
int x = int.Parse(arr[i]);
}
StopTiming();
}
}
...
}

Java , . .Net . double Java float. Mono StringBuilder.

, , , . .Net , . 4 5 Mono Java , (!) . Java Linux Windows .

Mono Java .Net, , - Mono , , .
Java , .Net .
:
updated