Visual Studio 拡張機能 OzCode の新バージョン:LINQ to Entity Framework クエリのデバッグ

OzCode は、新しい LINQ のデバッグ機能を導入した新バージョン 3.0 を 3 か月前に発表しました。これによって LINQ のデバッグ体験は大躍進を遂げ、C# 開発者は複雑な LINQ クエリの詳細を視覚的に分割そして理解することが可能になり、彼らにとって人生を変える機能であると言われています。

それでは、なぜ OzCode は休むことなく新バージョン 3.1 のリリースを急ぐのでしょうか?

オリジナルの LINQ のデバッグ体験は素晴らしいものの、すべてが完璧なわけではありませんでした。なぜなら、それは LINQ to Objects クエリ (または IEnumerable<T> コレクション) の操作に限られていたからです。LINQ to Entity FrameworkLINQ to SQL、またはその他の LINQ を扱う場合、IQueryables (IEnumerable vs IQueryable を見る) を処理する必要があります。OzCode の新しい LINQ のデバッグ機能を楽しめないのには、いくつかの理由がありました。

IQueryable デバッグが今までサポートされなかった理由

LINQ to Entities または LINQ to SQL を処理する場合、通常データベースを扱います。データベースは、非常に大きくなる傾向があります。

OzCode の LINQ のデバッグ機能は、ソースを含め、LINQ クエリを通過したすべての値を表示することを前提としています。データベースを扱うことから、通常ソースは、何百万という行が潜在的に含まれているテーブル全体が対象です。テーブル内にあるすべてのアイテムを数えて表示すると、デバッグ セッションがフリーズしたり、OutOfMemoryException で Visual Studio がクラッシュする恐れがあります。

熟慮の結果、OzCode は、データを最大 100,000 の任意数の行まで評価することを決定しました。これは、クエリの動作を把握するための十分な大きさであると同時に、ローカル データベースで秒単位で分析するには十分に小さい数字です。データが 100,000 件を超える場合、OzCode は何が発生したのかを説明するポップアップを表示します。

この場合、実際にデータが 100,000 件を超えています。OzCode は、データ ソース内の最初の 100,000 件を抜粋し、部分的な結果を表示します。

OzCode は、裏で Take() を使用して、部分的な結果を表示します。

データが非常に大きい場合に実際の結果を表示

部分的な結果だけでなく、実際の完全な結果を見たい場合、OzCode は回避策を提供します。結果の量が 100,000 件を超えない確信がある部分のクエリのどこかに、.ToList() を追加するだけです。Edit & Continue を活用して、デバッガーを停止することなく .ToList() を追加することができます。

クエリ内に .ToList() または .ToArray() が既に存在する場合、OzCode はそこから評価を開始します。

LINQ のデバッグでできること

LINQ のデバッグにより、誰もが愛する長い LINQ クエリを記述し、デバッグを妥協することはありません。OzCode は、各 LINQ 演算子によって返されるアイテムの数を表示します。このインジケーター  をクリックすることで、すべてのアイテムを含む DataTip が表示されます。そこで特定のアイテムを選択し、LINQ パイプラインをそのように移動するのか見ることができます。

LINQ to のデバッグについて詳しく知りたい方は、こちらからすべての機能を見ることができます。

さいごに

OzCode は現在、あらゆる IQueryable コレクションのデバッグをサポートします。Entity FrameworkLINQ to MongoDB、または LINQ to Twitter が含まれます。

IQueryable のサポートは、ここ数か月の間で最もリクエストが多い機能の 1 つだったため、OzCode はこの機能の提供開始を楽しみにしています。

もちろん、これだけではありません!

1 つの LINQ 演算子と次の演算子の間における、特定のコレクションの変換の様子を追跡したいと考えたことはありませんか?次の OzCode のブログでは、LINQ 分析ウィンドウ内の新しい 「ピン」機能など、バージョン 3.1 で追加されたいくつかの素晴らしい機能を紹介します。以下はその予告になります。

このクエリでは、どの優秀な生徒がどこの学部から来ているでしょうか?OzCode は以下を表示します。

var aboveAverageStudents2 =
 from department in StudentRepository.GetAllDepartments()
 let departmentAverage = department.Students.Average(student => student.Grade)
 from student in department.Students
 where student.Grade >= departmentAverage
 select student.Name; (edited)

皆さんのフィードバックをお待ちしています。素敵なデバッグの一日をお過ごしください!

記事参照:
2017 年 6 月 8 日 Michael Shpilt
New Version Announced: Debugging LINQ to Entity Framework queries

その他の OzCode の機能の詳細は、弊社の OzCode 製品ページでご確認ください。

30日間の無償評価版もありますので、OzCode の凄さを実際に体験してみてください。

OzCode の購入・自動見積はこちらからどうぞ。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする