1. ホーム
  2. c#

[解決済み】プライベート静的メソッドを使用する利点

2022-04-06 01:57:11

質問

インスタンスフィールドの使用を必要としない内部プライベートメソッドを持つクラスを作成する場合、通常はコードの重複を減らすために、そのメソッドを静的として宣言することにパフォーマンスやメモリの利点がありますか?

foreach (XmlElement element in xmlDoc.DocumentElement.SelectNodes("sample"))
{
    string first = GetInnerXml(element, ".//first");
    string second = GetInnerXml(element, ".//second");
    string third = GetInnerXml(element, ".//third");
}

...

private static string GetInnerXml(XmlElement element, string nodeName)
{
    return GetInnerXml(element, nodeName, null);
}

private static string GetInnerXml(XmlElement element, string nodeName, string defaultValue)
{
    XmlNode node = element.SelectSingleNode(nodeName);
    return node == null ? defaultValue : node.InnerXml;
}

GetInnerXml()メソッドをstaticで宣言するメリットはあるのでしょうか? 意見レスは無しでお願いします、意見はあります。

どのように解決するのですか?

からの FxCopルールページ をこの上で

<ブロッククオート

メソッドを static とマークすると、コンパイラはこれらのメンバに対して非仮想的なコールサイトを生成します。非仮想呼び出しサイトを発行すると、呼び出しごとに現在のオブジェクト・ポインタが非NULLであることを確認する実行時チェックが行われなくなります。これにより、性能に敏感なコードでは、測定可能な性能向上が期待できます。場合によっては、現在のオブジェクトインスタンスにアクセスできないことが、正しさの問題になることもあります。