рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ .Net, рдЬрд╛рд╡рд╛ рдФрд░ рдореЛрдиреЛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░рдлреЙрд░реНрдореЗрдВрд╕

рдЖрдЗрдбрд┐рдпрд╛ рдЬрд╛рд╡рд╛ рдмрдирд╛рдо .рдиреЗрдЯ рдмрдирд╛рдо рдореЛрдиреЛ


рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХрд╛ рдмрд╣реБрдд рд╡рд┐рдЪрд╛рд░ .Net рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рд╡рд┐рд░реЛрдз рдХреЗ рдХрд╛рд░рдг рдЖрдпрд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдЗрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдпрдерд╛рд╕рдВрднрд╡ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдлрд┐рд░ рджрд┐рд▓рдЪрд╕реНрдк рдУрдкрдирд╕реЛрд░реНрд╕ рд╡рд┐рдХрд╛рд╕ рдореЛрдиреЛ (рдиреЗрдЯ рдХрд╛ рдореБрдлреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рджреЗрдЦрдиреЗ рдореЗрдВ рдЖрдпрд╛, рдФрд░ред рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдЙрд╕реА рд╕рдордп рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП рдЧрдПред рддрджрдиреБрд╕рд╛рд░, рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рджреЛ рд╕рдорд╛рди рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реА # рдореЗрдВ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИрдВ, рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб Google рдХреЛрдб рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
http://code.google.com/p/dotnet-java-benchmark/source/checkout
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡рд┐рднрд┐рдиреНрди рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдиреЗ рднрд╛рдЧ рд▓рд┐рдпрд╛:

рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдХреЛрдИ рдЯреНрдпреВрдирд┐рдВрдЧ, рдУрд╡рд░рдХреНрд▓реЙрдХрд┐рдВрдЧ рдпрд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмрд╕ рд▓реЗрдЯреЗрд╕реНрдЯ 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();
        }
    }
    ...
}

image

, , , , . .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();
        }
    }
    ...
}

image

.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();
        }
    }
    ...
}

image

.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();
        }
    }
    ...
}

image

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


image

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

image

Mono Java .Net, , - Mono , , .
Java , .Net .


:

updated


Source: https://habr.com/ru/post/In120090/


All Articles