6

私はC#を使用してゲームを書いていますが、関数がデリゲートを受け取り、代わりにパラメーターとして使用するデリゲートを作成してキャッシュする代わりに、関数名を誤って渡してしまうケースがいくつか見つかりました。これにより、これらの関数を呼び出すたびにデリゲートオブジェクトが作成され、関数が戻るとすぐにガベージになります。

私はこの間違いを犯したすべての場所を見つけたいので、それらを探すためにすべてのファイルのすべての行を読むことを避けたいと思います(何年にもわたるコードがあります)。VBに「optionstrict」があり、C#にその機能があれば機能すると思うオブジェクトの暗黙的な構築を無効にする方法を見ましたが、そうではないと思います。コンパイラの警告オプションも確認しましたが、ここでも役に立たないようです。

暗黙のデリゲート推論によって作成されたこれらのオブジェクトを識別して、ゴミを避けるためにコールバックを作成/キャッシュする必要がある場所を見つけることができる、合理的に便利な方法はありますか?

4

1 に答える 1

10

要するに、あなたの質問は「すべてのメソッド グループ変換を見つけるにはどうすればよいですか?」ということです。

現在、 Roslynというコードネームのプロジェクトに取り組んでいます。これにより、C# コンパイラと IDE が使用するのと同じ意味解析エンジンを使用できるようになります。言語の構文モデルを公開し、セマンティック アナライザーに質問できるセマンティック分析 APIを提供します。

Roslyn を使用すると、すべてのコードを構文ツリーにコンパイルし、それらの構文ツリーですべての式を検索できます。式が何かに変換されたかどうか、変換された場合は、変換アナライザーが変換をどのように分類したかを判断できる API があります。

現在、「コミュニティ テクノロジー プレビュー」段階にあります。予備的な実装がありますが、まだ完全な機能にはほど遠いです。CTP リリースでメソッド グループ変換アナライザーが実装されていたかどうかは覚えていません。

試してみてください。フィードバックがあれば、Roslyn フォーラムでぜひご意見をお寄せください。

詳細はこちら:

http://msdn.microsoft.com/en-us/roslyn

于 2012-04-25T18:27:23.160 に答える