Насколько этот вызов виртуального метода быстрее, чем вызов запечатанного метода?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Насколько этот вызов виртуального метода быстрее, чем вызов запечатанного метода?

Сообщение Anonymous »

Я немного работаю над производительностью виртуальных и запечатанных участников.

Ниже приведен мой тестовый код.

Выход

virtual total 3166ms
per call virtual 3.166ns
sealed total 3931ms
per call sealed 3.931ns


Я, должно быть, делаю что-то не так, потому что согласно этому виртуальный вызов быстрее, чем запечатанный вызов.

Я работаю в режиме выпуска с включенной функцией «Оптимизация кода».

Изменить: при работе за пределами VS (в качестве консольного приложения) время близко к нулю. . но виртуальное почти всегда выходит на первый план.

[TestFixture]
public class VirtTests
{

public class ClassWithNonEmptyMethods
{
private double x;
private double y;

public virtual void VirtualMethod()
{
x++;
}
public void SealedMethod()
{
y++;
}
}

const int iterations = 1000000000;

[Test]
public void NonEmptyMethodTest()
{

var foo = new ClassWithNonEmptyMethods();
//Pre-call
foo.VirtualMethod();
foo.SealedMethod();

var virtualWatch = new Stopwatch();
virtualWatch.Start();
for (var i = 0; i < iterations; i++)
{
foo.VirtualMethod();
}
virtualWatch.Stop();
Console.WriteLine("virtual total {0}ms", virtualWatch.ElapsedMilliseconds);
Console.WriteLine("per call virtual {0}ns", ((float)virtualWatch.ElapsedMilliseconds * 1000000) / iterations);

var sealedWatch = new Stopwatch();
sealedWatch.Start();
for (var i = 0; i < iterations; i++)
{
foo.SealedMethod();
}
sealedWatch.Stop();
Console.WriteLine("sealed total {0}ms", sealedWatch.ElapsedMilliseconds);
Console.WriteLine("per call sealed {0}ns", ((float)sealedWatch.ElapsedMilliseconds * 1000000) / iterations);

}

}


Подробнее здесь: https://stackoverflow.com/questions/440 ... ethod-call
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»