Я применяю правила анализа кода к проекту C# и пытаюсь оценить достоинства CA1859: используйте конкретные типы, когда это возможно для улучшения производительности.
namespace InterfaceCall
{
using System;
using System.Diagnostics;
internal class Program
{
static void Main(string[] args)
{
while (true)
{
Test concreteTest = new Test();
Call(concreteTest);
ITest interfaceTest = new Test();
Call(interfaceTest);
Console.ReadLine();
}
}
private static void Call(Test test)
{
var sw = Stopwatch.StartNew();
for (int i = 0; i < 10000000; i++)
{
test.Increment();
}
sw.Stop();
Console.WriteLine($"Concrete time taken: {sw.ElapsedMilliseconds} ms");
}
private static void Call(ITest test)
{
var sw = Stopwatch.StartNew();
for (int i = 0; i < 10000000; i++)
{
test.Increment();
}
sw.Stop();
Console.WriteLine($"Interface time taken: {sw.ElapsedMilliseconds} ms");
}
}
public interface ITest
{
void Increment();
}
public class Test : ITest
{
private int _count;
public void Increment()
{
_count++;
}
}
}
На машине другого разработчика при запуске в режиме выпуска без отладки результаты были примерно так же, как и ожидалось (то есть конкретная версия немного быстрее, примерно 1 мс на миллион итераций):
Я применяю правила анализа кода к проекту C# и пытаюсь оценить достоинства CA1859: используйте конкретные типы, когда это возможно для улучшения производительности.[code]namespace InterfaceCall { using System; using System.Diagnostics;
internal class Program { static void Main(string[] args) { while (true) { Test concreteTest = new Test(); Call(concreteTest);
ITest interfaceTest = new Test(); Call(interfaceTest);
Console.ReadLine(); } }
private static void Call(Test test) { var sw = Stopwatch.StartNew(); for (int i = 0; i < 10000000; i++) { test.Increment(); }
sw.Stop(); Console.WriteLine($"Concrete time taken: {sw.ElapsedMilliseconds} ms"); }
private static void Call(ITest test) { var sw = Stopwatch.StartNew(); for (int i = 0; i < 10000000; i++) { test.Increment(); }
sw.Stop(); Console.WriteLine($"Interface time taken: {sw.ElapsedMilliseconds} ms"); } }
public interface ITest { void Increment(); }
public class Test : ITest { private int _count;
public void Increment() { _count++; } } } [/code] На машине другого разработчика при запуске в режиме выпуска без отладки результаты были примерно так же, как и ожидалось (то есть конкретная версия немного быстрее, примерно 1 мс на миллион итераций):
Я применяю правила анализа кода к проекту C# и пытаюсь оценить достоинства CA1859: используйте конкретные типы, когда это возможно для улучшения производительности. namespace InterfaceCall
{
using System;
using System.Diagnostics;
Я применяю правила анализа кода к проекту C# и пытаюсь оценить достоинства CA1859: используйте конкретные типы, когда это возможно для улучшения производительности. namespace InterfaceCall
{
using System;
using System.Diagnostics;