0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C# 遅延実行ストリーミングと非ストリーミングの違いについて

Last updated at Posted at 2023-02-10

こんにちは!新人エンジニアの近藤です。
記念すべき記事初投稿。わーーーー緊張緊張💦
初投稿なので少しだけ自己紹介。
一言でいうと私はサッカー好きの新人へっぽこエンジニアです。
w杯に興奮して寝れず、少し前までは寝不足気味でした。ただ今大会はいろいろなドラマがあり、ほんとにブラボーな大会でしたね!
ってことで余談はこの辺にして、今回は遅延実行と即時実行について自分なりに整理してみました!ってお話です。
以前に同じような記事が「出てるかもしれんぞマキ」「・・・」「出てないかも!!」

はじめに

今回はC#についてお話します。
クエリ構文でwhere,selectとかorderbyその他もろもろありますよね。
今回はそんなクエリの実行形態の遅延実行について理解できなかったストリーミングと非ストリーミングの違いについて、実際に動かして理解できましたー!って話です。

遅延実行と即時実行

上記で上げていたクエリ構文はすべて遅延実行です。
遅延実行は実装した呼び出し位置では実行されないものです。後にforeach文などで実際にそのデータを使用するタイミングで実行されます。なので遅延実行です。

そしてその反対が即時実行です。ToArrayメソッドやToListメソッドなどがあげられます。
即時実行は呼び出された瞬間にそのクエリが実行されます。

ストリーミングと非ストリーミング
遅延実行にはストリーミング(例:Where,Select)と非ストリーミング(例:OrderBy)があります。といっても自分は違いがよく分かりませんでした。
なので・・・簡単なコードを書いて、実際に動かして違いを見てみました。

ちょうどW杯中だったのでベスト8の国データを用意しました。
画像1.png

そしてこのデータを下記のようにクエリ構文を書いて例外を発生させ、動きの違いを見てみました。

画像2.png

そしたら、ストリーミングの時でのコンソール画面はこんな感じ。例外に設定した"イングランド"の前までの要素はコンソール画面に表示されました。
画像3.png

しかし、非ストリーミングはコンソール画面に何も表示されず

なるほどなと
ストリーミングは要素一つ一つをみていくので例外が発生する前までの要素の処理は実行される。
非ストリーミング要素をすべて洗ってから処理を実行するので、例外が発生した場合、すべての要素の処理は実行されていない。

最後に
最後まで読んでいただきありがとうございました。
今回は、実際の動作を確認しながら学習したことで、とても理解が深まりました。
引き続き少しでも、1mmでも気になったことは今回のように学習していこうと思います!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?