2012-04-25 5 views
6

私はC#を使ってゲームを書いていますが、関数がデリゲートを取る場合が多く、デリゲートを作成してキャッシュする代わりに関数名を誤って渡してしまいました。これにより、これらの関数の呼び出しごとにデリゲートオブジェクトが作成されます。このオブジェクトは、関数が返されるとすぐにガーベッジになります。C#で暗黙的な委譲の推論を回避または検出する方法はありますか?

私はこのミスを犯したすべての場所を見つけるしたい、と私は彼らのために探しているすべてのファイルのすべての行を読んで避けることを好むと思います(年は、コードの価値があります)。私は、VBがどのように「オプション厳密」を持っているかを見てきました。これは、C#にその機能があっても、私にはうまくいくと思われるオブジェクトの暗黙的な構築を無効にします。私はコンパイラの警告オプションも見直しましたが、どちらも助けてくれないようです。

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

+1

あなたはたとえば、Visual Studioの正規表現検索はそれらを見つけるかもしれない場所を、提供することができますいくつかのコード例がありますか? – mellamokb

+0

デリゲートを受け入れるメソッド/関数を見つけたら右クリック→参照の検索(ただし、これは手動で各呼び出しをチェックすることになります)。 –

+1

これは実際にあなたに問題を引き起こしているという証拠はありますか?大部分の時間は、明示的なキャッシュの代わりにメソッドグループの変換を使用することの可読性の利点と比較して、パフォーマンスの低下はごくわずかです。 –

答えて

10

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

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

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

私たちは現在「コミュニティ技術プレビュー」段階にあります。私たちは暫定的な実装を行っていますが、それはまだ完全に近いところにはありません。メソッドグループ変換アナライザがCTPリリースで実装されているかどうかは覚えていません。

はそれを試してみると、あなたはそれについてのフィードバックを持っている場合、我々はロザリンフォーラムで自分の考えを聞くのが大好きです。ここ

詳細:

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

+0

おかげさまで、私は多くの理由からRoslynプロジェクトを楽しみにしていました。私は、時間を費やすことができるときにチェックするために、これをリストに追加します。 –

関連する問題