10000000 ToString took 17714ms, 0.0017714ms for one
10000000 custom took 37ms, 3.7E-06ms for one
namespace Test
{
using System;
using System.Diagnostics;
public class ToStringEnumPerfTest
{
public static void Main(string[] args)
{
const int load = 10000000;
var e = Enumm.e5;
var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < load; i++)
{
var str = e.ToString();
}
stopwatch.Stop();
Console.WriteLine(string.Format("{0} ToString took {1}ms, {2}ms for one", load, stopwatch.ElapsedMilliseconds, 1.0 * stopwatch.ElapsedMilliseconds / load));
stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < load; i++)
{
var str = ToString(e);
}
stopwatch.Stop();
Console.WriteLine(string.Format("{0} custom took {1}ms, {2}ms for one", load, stopwatch.ElapsedMilliseconds, 1.0 * stopwatch.ElapsedMilliseconds / load));
}
public static string ToString(Enumm e)
{
switch (e)
{
case Enumm.e1:
return"e1";
case Enumm.e2:
return"e2";
case Enumm.e3:
return"e3";
case Enumm.e4:
return"e4";
case Enumm.e5:
return"e5";
case Enumm.e6:
return"e6";
case Enumm.e7:
return"e7";
default:
return e.ToString();
}
}
public enum Enumm
{
e1,
e2,
e3,
e4,
e5,
e6,
e7
}
}
}
Re: enum.ToString стоит 2микросекунды, как Datetime.ToString
Здравствуйте, mihhon, Вы писали:
M>что за тормоза ?? или я что-то не понимаю ???
M>out — switch в 500 раз быстрее:
В вашей реализации не учитывается, что enum может быть Flags
Re[2]: enum.ToString стоит 2микросекунды, как Datetime.ToStr
M>>out — switch в 500 раз быстрее: L>В вашей реализации не учитывается, что enum может быть Flags
так ? те же тормоза
10000000 ToString took 17434ms, 0.0017434ms for one
10000000 custom took 38ms, 3.8E-06ms for one
namespace Test
{
using System;
using System.Diagnostics;
public class ToStringEnumPerfTest
{
public static void Main(string[] args)
{
const int load = 10000000;
var e = Enumm.flugz;
var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < load; i++)
{
var str = e.ToString();
}
stopwatch.Stop();
Console.WriteLine(string.Format("{0} ToString took {1}ms, {2}ms for one", load, stopwatch.ElapsedMilliseconds, 1.0 * stopwatch.ElapsedMilliseconds / load));
stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < load; i++)
{
var str = ToString(e);
}
stopwatch.Stop();
Console.WriteLine(string.Format("{0} custom took {1}ms, {2}ms for one", load, stopwatch.ElapsedMilliseconds, 1.0 * stopwatch.ElapsedMilliseconds / load));
}
public static string ToString(Enumm e)
{
switch (e)
{
case Enumm.e1:
return"e1";
case Enumm.e2:
return"e2";
case Enumm.e3:
return"e3";
case Enumm.e4:
return"e4";
case Enumm.e5:
return"e5";
case Enumm.e6:
return"e6";
case Enumm.e7:
return"e7";
default:
if (e == Enumm.flugz) return"flugs";
return e.ToString();
}
}
public enum Enumm
{
e1,
e2,
e3,
e4,
e5,
e6,
e7,
flugz = e1|e2
}
}
}
Re[2]: enum.ToString стоит 2микросекунды, как Datetime.ToStr
Здравствуйте, Lloyd, Вы писали:
M>>out — switch в 500 раз быстрее: L>В вашей реализации не учитывается, что enum может быть Flags
При чем тут это? Является enum-флагом или нет вполне можно определить в статике. Просто кому-то в микрософте было лень оптимизировать ToString у перечислений.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: enum.ToString стоит 2микросекунды, как Datetime.ToStr
Здравствуйте, hardcase, Вы писали:
M>>>out — switch в 500 раз быстрее: L>>В вашей реализации не учитывается, что enum может быть Flags
H>При чем тут это?
При том, что код не является эквивалетным. А производительость неэквивалентного кода глупо сравнивать.
H>Является enum-флагом или нет вполне можно определить в статике. Просто кому-то в микрософте было лень оптимизировать ToString у перечислений.
Тем не менее, в статике он не определяется.
Re[2]: enum.ToString стоит 2микросекунды, как Datetime.ToStr
M>>>>out — switch в 500 раз быстрее: L>>>В вашей реализации не учитывается, что enum может быть Flags
H>>При чем тут это?
L>При том, что код не является эквивалетным. А производительость неэквивалентного кода глупо сравнивать.