C# 2.0 で記述された大規模な (500k 以上の LOC) WinForms アプリを開発および保守しています。これはマルチユーザーで、現在約 15 台のマシンに展開されています。システムの開発は進行中であり (永続的なベータと見なすことができます)、毎週のビルドで導入される可能性のある潜在的な新しいバグからユーザーを保護するために行われたことはほとんどありません。
このため、とりわけ、デバッガーのエディット コンティニュに大きく依存するようになりました。バグハンティングやバグ修正だけでなく、場合によっては進行中の開発にも役立ちます。実行中のアプリケーションのコンテキスト内から新しく記述されたコードを実行できることは非常に価値があると思います。再コンパイルして、新しいコードに特定のエントリ ポイントを追加する必要はありません (ダミーのメニュー オプション、ボタンなどを追加する必要はありません)。アプリを削除し、次の本番ビルドの前にそれらを削除することを忘れないでください) - プロセスを停止することなく、すべてをリアルタイムで試行およびテストできます。
私はエディット コンティニュを非常に重視しており、エディット コンティニュと完全に互換性のあるコードを積極的に書いています。たとえば、私は避けます:
- 匿名メソッドとインライン デリゲート (書き換えが完全に不可能でない限り)
- ジェネリック メソッド (安定した不変のユーティリティ コードを除く)
- 「任意の CPU」でプロジェクトをターゲットにする (つまり、64 ビットで実行しない)
- 宣言時のフィールドの初期化 (初期化はコンストラクターに移されます)
- を使用する列挙子ブロックの作成
yield
(ユーティリティ コードを除く)
現在、C# 3 および 4 の新しい言語機能は、エディット コンティニュ (ラムダ式、LINQ など) とほとんど互換性がないことを十分に認識しています。これが、プロジェクトを新しいバージョンのフレームワークに移行することに抵抗した理由の 1 つです。
私の質問は、デバッグが非常に簡単なコードを優先して、これらのより高度な構造の使用を避けるのが良い方法であるかどうかです。この種の開発に正当性はありますか、それとも無駄ですか?また、重要なことに、これらの構成要素 (ラムダ式、匿名メソッドなど) のいずれかが、適切に記述されたエディット コンティニュ対応のコードで回避できるパフォーマンス/メモリ オーバーヘッドを引き起こしますか? ...または、C# コンパイラの内部動作により、このような高度な構造は、手動で記述された「展開された」コードよりも高速に実行されますか?