Дополнительная производительность метода

Обычно для создания объекта Time у вас есть закрытый / защищенный конструктор и открытый статический метод фабрики. Не следует генерировать исключение из конструктора, потому что это наносит ущерб наследованию. Таким образом, ваш фабричный метод может выдать исключение, если это необходимо.

8
задан tvanfosson 17 June 2009 в 12:03
поделиться

4 ответа

Extension methods are just a compile-time change from:

x.GetValueAsBoolean()

to

Extensions.GetValueAsBoolean(x)

That's all that's involved - translating what looks like an instance method call into a call to a static method.

If you don't have performance problems with the static method, then making it an extension method won't introduce any new problems.

EDIT: IL, as requested...

Taking this sample:

using System;

public static class Extensions
{
    public static void Dump(this string x)
    {
        Console.WriteLine(x);
    }
}

class Test
{
    static void Extension()
    {
        "test".Dump();
    }

    static void Normal()
    {
        Extensions.Dump("test");
    }
}

Here's the IL for Extension and Normal:

.method private hidebysig static void  Extension() cil managed
{
  // Code size       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "test"
  IL_0006:  call       void Extensions::Dump(string)
  IL_000b:  nop
  IL_000c:  ret
} // end of method Test::Extension

.method private hidebysig static void  Normal() cil managed
{
  // Code size       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "test"
  IL_0006:  call       void Extensions::Dump(string)
  IL_000b:  nop
  IL_000c:  ret
} // end of method Test::Normal

As you can see, they're exactly the same.

25
ответ дан 5 December 2019 в 05:13
поделиться

Методы расширения - это просто колдовство компилятора, поэтому они имеют все последствия для производительности обычных методов во время выполнения .

3
ответ дан 5 December 2019 в 05:13
поделиться

Вы не пострадаете от производительности, поскольку все методы расширения привязаны к время компиляции (как это сказать?).

2
ответ дан 5 December 2019 в 05:13
поделиться

В худшем случае у вас будет дополнительный вызов функции. Если серьезно, то я надеюсь, что он сможет встроить этот код настолько просто, насколько он есть, и не даст никакого заметного эффекта.

1
ответ дан 5 December 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: