[過去ログ] 【ゲームエンジン】Unity初心者質問スレBuild2 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
964: 名前は開発中のものです。 [sage] 2020/01/10(金) 12:14:16.98 ID:6FaPVqIC(1/3) AAS
>>963LINQのメソッドに渡すデリゲートは取り扱いを間違えるとGC対象になるし
それに関してググって出てくる記事がほぼ全て検証も解釈も間違ってるから使うなというのは分かる
968(1): 名前は開発中のものです。 [sage] 2020/01/10(金) 14:23:25.79 ID:6FaPVqIC(2/3) AAS
>>967967(1): 名前は開発中のものです。 [sage] 2020/01/10(金) 12:57:56.83 ID:5Sf2RA1L(1/2) AAS
デリゲートがってよりも、Linqで色々繋げると色々コピーがされるしIEnum経由して列挙してくのがアレって話じゃないか?
IEnumerableは一つずつ取り出して処理する為の機能だから、
複製はされないしチェーンの数だけループ発生したりもしないよ
もちろんToArray()で新規配列は生成されるしOrderBy()でも内部で別のループが生まれてしまうがそれはそういう関数だからな
970(1): 名前は開発中のものです。 [sage] 2020/01/10(金) 18:42:11.72 ID:6FaPVqIC(3/3) AAS
>>969969(2): 名前は開発中のものです。 [sage] 2020/01/10(金) 15:40:25.16 ID:5Sf2RA1L(2/2) AAS
>>968
いやもし5段階に組まれてたら下から見るとMoveNext5回呼ばれる事でやっと元のコレクションなりにたどり着くやん
あれインタフェースになってて1番下でのMoveNextでもとのに辿り着くっけ?
例えばこんなLINQがあるとするだろ
var seq = list.Where(A).Where(B).Where(C);
foreach(var n in seq) Console.WriteLine(n);
内部的にはこの処理と同じ
var tmp = list.GetEnumerator();
while(tmp.MoveNext()){
var n = tmp.Current;
if(!A(n)) continue;
if(!B(n)) continue;
if(!C(n)) continue;
Console.WriteLine(n);
}
取り出した要素をチェーンに繋いである関数に順番に渡してるだけ
要素一つにMoveNextを何回も呼んでるわけじゃない
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.277s*