[解決済み] ToList()を呼び出すと、パフォーマンスに影響がありますか?
質問
を使用する場合
ToList()
パフォーマンスへの影響はありますか?
あるディレクトリからファイルを取得する、というクエリを書いていました。
string[] imageArray = Directory.GetFiles(directory);
しかし、私が好きなのは
List<>
を入れることにしました。
List<string> imageList = Directory.GetFiles(directory).ToList();
つまり、このような変換を行うことを決定する際に考慮すべきパフォーマンスへの影響のようなものがあるのでしょうか。それとも、大量のファイルを扱う場合にのみ考慮すべきなのでしょうか。これは無視できる変換なのでしょうか?
どのように解決するのですか?
IEnumerable.ToList()
はい。
IEnumerable<T>.ToList()
はパフォーマンスに影響を及ぼしますが、それは
O(n)
の操作は、パフォーマンスが重要な操作でのみ注意が必要でしょう。
その
ToList()
の操作では
List(IEnumerable<T> collection)
コンストラクタを使用します。このコンストラクタは配列のコピーを作成しなければなりません(より一般的には
IEnumerable<T>
そうしないと、将来的に元の配列に変更を加えたときに、ソースである
T[]
も、一般的には好ましくないでしょう。
メモリのチャンクをコピーするのは非常に高速な操作です。
便利なヒント
As
対
To
LINQの中には、以下のように
As
(例えば
AsEnumerable()
) と
To
など
ToList()
). で始まるメソッドは
To
で始まるメソッドは上記のような変換が必要であり(つまり、パフォーマンスに影響を与える可能性がある)。
As
のように、キャストや簡単な操作で済みます。
の詳細
List<T>
以下、もう少し詳しく説明します。
List<T>
が動作します。)
A
List<T>
このリサイズイベントは、古い配列の内容を新しい配列にコピーします。そのため、最初は小さく、そして
必要であれば、サイズを大きくする
.
との違いです。
Capacity
と
Count
属性は
List<T>
.
Capacity
は、裏側の配列の大きさを指しています。
Count
の項目数です。
List<T>
であり、常に
<= Capacity
. そのため、リストに項目が追加された場合、それを増やすことで過去の
Capacity
のサイズが小さくなる。
List<T>
が2倍になり、配列がコピーされます。
関連
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Array.forEachでbreakを呼び出すようなショートサーキット
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] リストの要素を値で削除する簡単な方法はありますか?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] LINQクエリでToList()とToArray()のどちらを呼び出すのが良いですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み] IEnumerable<T> からアイテムを反復せずにカウントする?
-
[解決済み] なぜArrayListは初期容量で始まるのですか?