この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。
建築家
建築家
リスト
放送
茶屋
インテリジェントAI会話
.NETキャリア&テクニカルカレッジ
ちっちゃいなクズブログ
この版
利用者
Architect_Programmer_Code農業ネットワーク
»
建築家
›
プログラミング
›
.Net/C#
›
Linq: 集合が非nullであることを判定するためにCount() > 0を使わないでください...
眺める:
22799
|
答える:
1
[出典]
Linq: 集合が空でないことを判定するためにCount() > 0を使わないでください
[リンクをコピー]
クズども
掲載地 2017/10/12 13:25:01
|
|
|
|
Linq以前は、集合が非空であるかどうか、すなわち集合が要素を含むかどうかを判定するために通常、以下の方法を用いました。
ログインが見えます。
LengthやCount属性を使えば、上記の書き方に問題はありません。
しかしLinq時代には、Enumerable.Count拡張法がLengthとCountの性質を「統一」し、非零性を判断するための次の書き方を生み出しました。
ログインが見えます。
この書き方は問題なく動作しますが、非常に深刻なパフォーマンスの問題を引き起こすことがあります。
ただし、これは可能であり必ずしもそうとは限らず、上記のメソッドがArray<T>、List、またはCollectionとして渡されれば<T>問題はありません。
では、いつ何かがうまくいかないのでしょうか? 以下の方法を見てみましょう。
ログインが見えます。
呼ばれた時:
ログインが見えます。
実行速度はかなり遅く、私のコンピュータがソースを実行するのに約70秒かかりました。 Count() > 0。
分析すると、GetNumsコードの5行目のyield returniはintを実行します。 MaxValue、それは必要ですか?
実際、1つの要素を返す限り、その集合は空でないこと、すべての要素を返す必要はないと結論づけられます。
では、どう判断すればいいのでしょうか? Enumerable.any 拡張メソッドを用いることができます:
SomeActionメソッドを次のように修正します:
ログインが見えます。
もう一度呼べば、実行時間はほとんど無視できるほどです。
まとめると、Count() > 0はイールドリターンに遭遇した際に必然的にパフォーマンスの問題を抱えます。
先の:
C#の3タイマー実装
次に:
js文字列からdateとdateプラス日まで
関連記事
•
C#/.NETはSequenceEqualを使って2つの集合が等しいかどうかを比較します
•
.NET/C#コレクションリスト、HashSetで要素にベンチマークがあるかどうかを判定します
•
.NET/C#コレクション Any() または Count() の方が速い
•
.NET/C#コレクションタイプのクエリベンチマーク
•
C#の交差、和集合、そしてコレクションの差集合
•
. .NET 読み取り専用のコレクションインターフェースの物語
•
c# ラムダ式集合の脱集団化による最小値
•
C#コレクションはnull型から非null型に変換可能です
•
.net/c# HashSet で一意なオブジェクトを追加できます
•
C#はコレクションの2つの異なる要素を比較します
閲覧したセクション
HTML/CSS/JavaScript
Windows/Linux
苦情の提案
発表情報
ネットワーク技術
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。
Mail To:help@itsvse.com