トップページ > プログラム > 2015年11月15日 > kqjPbh/t

書き込み順位&時間帯一覧

35 位/181 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000110000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
ふらっと C#,C♯,C#(初心者用) Part117 [転載禁止]©2ch.net

書き込みレス一覧

ふらっと C#,C♯,C#(初心者用) Part117 [転載禁止]©2ch.net
826 :デフォルトの名無しさん[sage]:2015/11/15(日) 16:38:51.59 ID:kqjPbh/t
SQLをシンプルにして、LINQでごにょごにょする。
かなり綺麗になる。でも、巨大なデータをメモリ上に置くことになるので
これが最適かどうかはわからない。
どうしたらいいんだろう…。
ふらっと C#,C♯,C#(初心者用) Part117 [転載禁止]©2ch.net
828 :デフォルトの名無しさん[sage]:2015/11/15(日) 17:06:33.10 ID:kqjPbh/t
ユーザー情報がID、名前、年齢、パスワード、メールアドレスで管理されているとする。
IDが4バイト、名前が255バイト、年齢1バイト、パスワード255バイト、メールアドレス255バイト
だとすると、1レコードで770バイト。1万人を管理するとして、7,700,000バイトつまり7MB。
メモリ数が4GBだとすると、1/600くらいをメモリが占めることになる。思ったより巨大。

例えば年齢が25歳以下のユーザーだけを取り出したいとする。
そのために、.Where(u => u.age <= 25) というLINQ式を追加する。
7MBのデータを一つずつ見ていかなければならないとすると、一つのメソッドでどれくらいの時間がかかるだろうか?
完全に適当だが、1レコードで100万分の1秒くらいと予想。
1万人で0.01秒。つまりメソッド一つで0.01秒しかかからない。
メモリもすぐに解放される。1/600と聞くと意外と大きな割合のように思えるが、存在しているのはほんの0.01秒である。

さて、メソッドが連なっている場合はどうなるか。
一つ目のメソッドでWbereメソッドを使っているとすると、二つ目以降のメソッドでは、処理対象のレコードが少なくなる。
それは例えば1万→5000といったように。
すると当然、処理時間も減少する。上の例では0.005秒と半分になる。

対象レコード数が1万程度なら何も問題はなさそうだ。
だから僕は、効率よりもソースコードの綺麗さを取ることにする。

これが100万行とかになると、1メソッドで1秒かかることになる。流石にそれはまずいので、
SQL分にWHERE句を追加して、RDBMSに条件の絞り込みの処理を任せる。

if,elseなどを使う必要がある場合はLINQを、最初から決まっている絞り込み条件の場合はそのままWHERE句を
使用する。そうすることにより、早さを維持しながらソースコードを綺麗にすることができる。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。