Я немного работаю над производительностью виртуальных и запечатанных участников.
Ниже приведен мой тестовый код.
Выход
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
Насколько этот вызов виртуального метода быстрее, чем вызов запечатанного метода? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение