2

クラスに 1 つのメソッドしかなく、そのメソッドが何度もしか呼び出されない場合、以下のように従来の方法でメソッドを呼び出す代わりに

RarelyCalledClass orarelyCalled = new RarelyCalledClass();
orarelyCalled.rarelyCalledMethod();

これを以下のように呼び出すことができますか。

(new RarelyCalledClass()).rarelyCalledMethod();

コンパイラが行う操作が少なくなるため、これによりパフォーマンスが向上しますか。

4

3 に答える 3

0

後でどこかでインスタンスを使用しない限り、コンパイル後も同じである必要があります。ただし、 ILSpyは違いを示しています。

初版(課題あり)

.method private hidebysig static 
    void Main (
        string[] args
    ) cil managed 
{
    // Method begins at RVA 0x2058
    // Code size 13 (0xd)
    .maxstack 1
    .entrypoint
    .locals init (
        [0] class ConsoleApplication1.TestClass obj
    )

    IL_0000: newobj instance void ConsoleApplication1.TestClass::.ctor()
    IL_0005: stloc.0
    IL_0006: ldloc.0
    IL_0007: callvirt instance void ConsoleApplication1.TestClass::TestMethod()
    IL_000c: ret
} // end of method Program::Main

2 番目のバージョン (割り当てなし)

.method private hidebysig static 
    void Main (
        string[] args
    ) cil managed 
{
    // Method begins at RVA 0x2058
    // Code size 11 (0xb)
    .maxstack 8
    .entrypoint

    IL_0000: newobj instance void ConsoleApplication1.TestClass::.ctor()
    IL_0005: call instance void ConsoleApplication1.TestClass::TestMethod()
    IL_000a: ret
} // end of method Program::Main

どちらもリリースモードでビルドされています。

于 2013-04-10T07:41:39.550 に答える