Submit Search
Upload
Linqの速度測ってみた
•
Download as PPTX, PDF
•
0 likes
•
4,386 views
Core Concept Technologies
Follow
【LINQ入門】C#のイケてるリスト操作機能LINQの入門編です。各種操作とその実効速度比較してみました。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 22
Download now
Recommended
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
モノビット エンジン
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
Recommended
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
モノビット エンジン
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
Jenkins 再入門
Jenkins 再入門
Jumpei Miyata
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
C#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Platform - Japan
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
例外設計における大罪
例外設計における大罪
Takuto Wada
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
gree_tech
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
Ryuji TAKEHARA
MlnagoyaRx
MlnagoyaRx
Shoichi Kakamu
More Related Content
What's hot
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
Jenkins 再入門
Jenkins 再入門
Jumpei Miyata
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
C#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Platform - Japan
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
例外設計における大罪
例外設計における大罪
Takuto Wada
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
gree_tech
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
What's hot
(20)
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
暗号技術の実装と数学
暗号技術の実装と数学
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Jenkins 再入門
Jenkins 再入門
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
C#で速度を極めるいろは
C#で速度を極めるいろは
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
インタフェース完全に理解した
インタフェース完全に理解した
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
例外設計における大罪
例外設計における大罪
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Similar to Linqの速度測ってみた
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
Ryuji TAKEHARA
MlnagoyaRx
MlnagoyaRx
Shoichi Kakamu
Handlersocket etc. 20110906
Handlersocket etc. 20110906
akirahiguchi
Boost17 cpplinq
Boost17 cpplinq
miki_hirofumi
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
Typesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive System
TIS Inc.
ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
ssuser8b389c
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by 朱義文
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by 朱義文
CODE BLUE
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
Yoshifumi Kawai
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
akira6592
20120405 setsunaセミナー
20120405 setsunaセミナー
Takahiro Iwase
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Daisuke Ikeda
Hbstudy41 auto scaling
Hbstudy41 auto scaling
Fujishiro Takuya
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
OSC2012-KANSAI@Kyoto JOSUG
OSC2012-KANSAI@Kyoto JOSUG
Hideki Saito
運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回
Shigeharu Yamaoka
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
Takahiro Iwase
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
cloudconductor
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
Similar to Linqの速度測ってみた
(20)
Smart Tennis Lesson Serverless Design
Smart Tennis Lesson Serverless Design
MlnagoyaRx
MlnagoyaRx
Handlersocket etc. 20110906
Handlersocket etc. 20110906
Boost17 cpplinq
Boost17 cpplinq
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
Typesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive System
ぱっと見でわかるC++11
ぱっと見でわかるC++11
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by 朱義文
[CB19] Semzhu-Project – 手で作る組込み向けハイパーバイザと攻撃検知手法の新しい世界 by 朱義文
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
私たちはRESTCONFでネットワーク自動化的に何が嬉しくなるのか考えてみた
20120405 setsunaセミナー
20120405 setsunaセミナー
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Hbstudy41 auto scaling
Hbstudy41 auto scaling
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
OSC2012-KANSAI@Kyoto JOSUG
OSC2012-KANSAI@Kyoto JOSUG
運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
More from Core Concept Technologies
センシングサイエンティストが経費精算を自動化したらこうなった
センシングサイエンティストが経費精算を自動化したらこうなった
Core Concept Technologies
コンソールアプリケーションでDIを使う
コンソールアプリケーションでDIを使う
Core Concept Technologies
開発環境をWindowsからMacに移行してみた話
開発環境をWindowsからMacに移行してみた話
Core Concept Technologies
データソースにLinqDataSourceを使った場合のGridViewの高速化
データソースにLinqDataSourceを使った場合のGridViewの高速化
Core Concept Technologies
ロボットアームをPythonで動かす
ロボットアームをPythonで動かす
Core Concept Technologies
Pythonでディープラーニングをはじめるための一歩目
Pythonでディープラーニングをはじめるための一歩目
Core Concept Technologies
Pythonで簡単動画解析
Pythonで簡単動画解析
Core Concept Technologies
Pythonで簡単な統計・分析をしてみよう!
Pythonで簡単な統計・分析をしてみよう!
Core Concept Technologies
Google Colab環境でPythonスクレイピング
Google Colab環境でPythonスクレイピング
Core Concept Technologies
可視化の先にあるものとは
可視化の先にあるものとは
Core Concept Technologies
ロボットと協働生活中に試行錯誤したこと
ロボットと協働生活中に試行錯誤したこと
Core Concept Technologies
3Dモデル類似検索
3Dモデル類似検索
Core Concept Technologies
GPUいらずの高速動画異常検知
GPUいらずの高速動画異常検知
Core Concept Technologies
固有表現抽出と適用例のご紹介
固有表現抽出と適用例のご紹介
Core Concept Technologies
深層強化学習入門
深層強化学習入門
Core Concept Technologies
なぜIoTプロジェクトは途中でとまってしまうのか。
なぜIoTプロジェクトは途中でとまってしまうのか。
Core Concept Technologies
工場に!オフィスに!明日、お安く、安全に導入できるセンサー紹介します
工場に!オフィスに!明日、お安く、安全に導入できるセンサー紹介します
Core Concept Technologies
AIによる簡単レコメンドシステム実装
AIによる簡単レコメンドシステム実装
Core Concept Technologies
Orizuru IoTは何を変えたのか
Orizuru IoTは何を変えたのか
Core Concept Technologies
データを活用して何を実現してきたか?
データを活用して何を実現してきたか?
Core Concept Technologies
More from Core Concept Technologies
(20)
センシングサイエンティストが経費精算を自動化したらこうなった
センシングサイエンティストが経費精算を自動化したらこうなった
コンソールアプリケーションでDIを使う
コンソールアプリケーションでDIを使う
開発環境をWindowsからMacに移行してみた話
開発環境をWindowsからMacに移行してみた話
データソースにLinqDataSourceを使った場合のGridViewの高速化
データソースにLinqDataSourceを使った場合のGridViewの高速化
ロボットアームをPythonで動かす
ロボットアームをPythonで動かす
Pythonでディープラーニングをはじめるための一歩目
Pythonでディープラーニングをはじめるための一歩目
Pythonで簡単動画解析
Pythonで簡単動画解析
Pythonで簡単な統計・分析をしてみよう!
Pythonで簡単な統計・分析をしてみよう!
Google Colab環境でPythonスクレイピング
Google Colab環境でPythonスクレイピング
可視化の先にあるものとは
可視化の先にあるものとは
ロボットと協働生活中に試行錯誤したこと
ロボットと協働生活中に試行錯誤したこと
3Dモデル類似検索
3Dモデル類似検索
GPUいらずの高速動画異常検知
GPUいらずの高速動画異常検知
固有表現抽出と適用例のご紹介
固有表現抽出と適用例のご紹介
深層強化学習入門
深層強化学習入門
なぜIoTプロジェクトは途中でとまってしまうのか。
なぜIoTプロジェクトは途中でとまってしまうのか。
工場に!オフィスに!明日、お安く、安全に導入できるセンサー紹介します
工場に!オフィスに!明日、お安く、安全に導入できるセンサー紹介します
AIによる簡単レコメンドシステム実装
AIによる簡単レコメンドシステム実装
Orizuru IoTは何を変えたのか
Orizuru IoTは何を変えたのか
データを活用して何を実現してきたか?
データを活用して何を実現してきたか?
Recently uploaded
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
Recently uploaded
(9)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
Linqの速度測ってみた
1.
LINQの速度測ってみた 2019年7月19日
2.
© 2019 Core
Concept Technologies Inc. 安宅彰一朗(アタケショウイチロウ) 所属:本社事業部 役職:シニアエンジニア 好きな食べ物:ハンバーガー 最近はSpringBootでJavaJavaしてます 自己紹介 1CONFIDENTIAL
3.
© 2019 Core
Concept Technologies Inc. ざっくり言うと集合をSQLっぽく扱える仕組みです。こんなの。 LINQとは 2CONFIDENTIAL var ret = collection .Where(x => x >= 500) // 条件で絞って .Select(x => x * x) // 個別に処理して .OrderBy(x => x); // ソートする C#的にはIEnumerableインターフェイスを実装しているオブジェクトに 対してGenerics、拡張メソッドで実現されているライブラリです。 ※ちなみにこの資料はなにか素晴らしい知見が得られるようなものではなく 思うがままLINQの速度を測ってみた、ただそれだけです!
4.
© 2019 Core
Concept Technologies Inc. 以下のようなインターフェイスです。 LINQはこれに対して処理処理を行うものです。 なのでLINQに対応した独自クラスなんかも簡単に作れちゃいます。 ※今回は実装まではやりません。気になる人は実装してみてください。 IEnumerable(アイエニュメラブル)ってなんぞ? 3CONFIDENTIAL class DemoList : IEnumerable { public IEnumerator GetEnumerator() { return new DemoListEnumerator(); } class DemoListEnumerator : IEnumerator { public Object Current { get; } // 今いる場所 public bool MoveNext() { return true; } // 次へ移動(移動できればtrue) public void Reset() { } // 今いる場所を最初に戻す } }
5.
© 2019 Core
Concept Technologies Inc. ICollectionならプロパティあるんだから使えばいいじゃん的な 最適化が入ってますが、主要実装はこれだけ。とってもシンプル! https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/Count.cs ちょっとCount覗いてみましょう 4CONFIDENTIAL public static int Count<TSource>(this IEnumerable<TSource> source) { : int count = 0; using (IEnumerator<TSource> e = source.GetEnumerator()) { checked { while (e.MoveNext()) { count++; } } } return count; }
6.
© 2019 Core
Concept Technologies Inc. 準備 5CONFIDENTIAL // 1~10000000ランダム数列1億件 List<int> listRandom = SpeedTestBase.CreateList(100000000); // 1~1億の数列 IEnumerable<int> enumerableNum = Enumerable.Range(1, 100000000); 端末スペック CPU:Core i5(4コア) メモリ:16GB
7.
© 2019 Core
Concept Technologies Inc. Count-List : 00:00:00.0005399 Count-IEnumerable : 00:00:00.2788430 ListとIEnumerableのCountは全然違う 6CONFIDENTIAL sw.Restart(); var result_01_1 = listRandom.Count(); sw.Stop(); Console.WriteLine("Count-List : " + sw.Elapsed); sw.Restart(); var result_01_2 = enumerableNum.Count(); sw.Stop(); Console.WriteLine("Count-IEnumerable : " + sw.Elapsed);
8.
© 2019 Core
Concept Technologies Inc. Max-LINQ : 00:00:00.6924498 Max-foreach : 00:00:00.4709000 Max(最大値) 7CONFIDENTIAL sw.Restart(); var result_02_1 = listRandom.Max(); sw.Stop(); Console.WriteLine("Max-LINQ : " + sw.Elapsed); sw.Restart(); int max = 0; foreach (int i in listRandom) { if(max < i) { max = i; } } sw.Stop(); Console.WriteLine("Max-foreach : " + sw.Elapsed);
9.
© 2019 Core
Concept Technologies Inc. Where-LINQ-toList : 00:00:00.8328413 Where-LINQ-foreach : 00:00:00.7824337 Where-foreach : 00:00:00.6183393 Where(抽出) 8CONFIDENTIAL sw.Restart(); var result_03_1 = listRandom.Where(x => x % 123 == 0).ToList(); sw.Stop(); Console.WriteLine("Where-LINQ-toList : " + sw.Elapsed); sw.Restart(); var result_03_2 = listRandom.Where(x => x % 123 == 0); foreach (var x in result_03_2) { } sw.Stop(); Console.WriteLine("Where-LINQ-foreach : " + sw.Elapsed); sw.Restart(); var result_03_3 = new List<int>(); foreach (var x in listRandom) { if (x % 123 == 0) { result_03_3.Add(x * x); } } sw.Stop(); Console.WriteLine("Where-foreach : " + sw.Elapsed);
10.
© 2019 Core
Concept Technologies Inc. Parallel LINQ (PLINQ) は、LINQ パターンの並列実装です。 PLINQ クエリは、あらゆ る意味において、並列ではない LINQ to Objects クエリに似ています。 PLINQ クエリ は、LINQ の順次クエリと同様、メモリ内の IEnumerable また は IEnumerable<T> データ ソースで実行され、遅延実行が存在するので、クエリが列 挙されるまでは実行されません。 主な相違点は、PLINQ は、システムのすべてのプロ セッサを十分に活用しようとする点です。 そのために、データ ソースをセグメントに パーティション分割し、複数のプロセッサで個々のワーカー スレッドの各セグメントに 対してクエリを並行実行します。 多くの場合、並行実行によって、クエリは非常に高速 に処理されます。 https://docs.microsoft.com/ja-jp/dotnet/standard/parallel-programming/parallel- linq-plinq そういえばPLINQってあったやん 9CONFIDENTIAL
11.
© 2019 Core
Concept Technologies Inc. Parallel LINQ (PLINQ) は、LINQ パターンの並列実装です。 PLINQ クエリは、あらゆ る意味において、並列ではない LINQ to Objects クエリに似ています。 PLINQ クエリ は、LINQ の順次クエリと同様、メモリ内の IEnumerable また は IEnumerable<T> データ ソースで実行され、遅延実行が存在するので、クエリが列 挙されるまでは実行されません。 主な相違点は、PLINQ は、システムのすべてのプロ セッサを十分に活用しようとする点です。 そのために、データ ソースをセグメントに パーティション分割し、複数のプロセッサで個々のワーカー スレッドの各セグメントに 対してクエリを並行実行します。 多くの場合、並行実行によって、クエリは非常に高速 に処理されます。 https://docs.microsoft.com/ja-jp/dotnet/standard/parallel-programming/parallel- linq-plinq そういえばPLINQってあったやん 10CONFIDENTIAL まあ理屈はどうでもいいんですよ 測ってみましょう!
12.
© 2019 Core
Concept Technologies Inc. PLINQ-Heavy-ForAll : 00:00:07.5491188 PLINQ-Heavy-foreach : 00:00:26.5182497 PLINQのForAllとforeach(重い処理) 11CONFIDENTIAL sw.Restart(); var result_03_4 = listRandom.AsParallel().Where(x => x % 123 == 0); result_03_4.ForAll(x => SpeedTestBase.HeavyProc(x)); sw.Stop(); Console.WriteLine("PLINQ-Heavy-ForAll : " + sw.Elapsed); sw.Restart(); var result_03_5 = listRandom.AsParallel().Where(x => x % 123 == 0); foreach(var x in result_03_5) { SpeedTestBase.HeavyProc(x); } sw.Stop(); Console.WriteLine("PLINQ-Heavy-foreach : " + sw.Elapsed); 因数分解してます
13.
© 2019 Core
Concept Technologies Inc. Microsoftドキュメントちゃんとしてるから大好きです。 https://docs.microsoft.com/ja-jp/dotnet/standard/parallel- programming/introduction-to-plinq なんでなんでしたっけ? 12CONFIDENTIAL
14.
© 2019 Core
Concept Technologies Inc. PLINQ-light-ForAll : 00:00:00.4169516 PLINQ-light-foreach : 00:00:00.3145349 PLINQのForAllとforeach(軽い処理) 13CONFIDENTIAL sw.Restart(); var result_04_1 = listRandom.AsParallel().Where(x => x % 123 == 0); result_04_1.ForAll(x => SpeedTestBase.lightProc(x)); sw.Stop(); Console.WriteLine("PLINQ-light-ForAll : " + sw.Elapsed); sw.Restart(); var result_04_2 = listRandom.AsParallel().Where(x => x % 123 == 0); foreach (var x in result_04_2) { SpeedTestBase.lightProc(x); } sw.Stop(); Console.WriteLine("PLINQ-light-foreach : " + sw.Elapsed); 1足してます
15.
© 2019 Core
Concept Technologies Inc. 学び 14CONFIDENTIAL
16.
© 2019 Core
Concept Technologies Inc. 1.PowerPointにソースコード貼るのめちゃ大変 学び 15CONFIDENTIAL
17.
© 2019 Core
Concept Technologies Inc. 1.PowerPointにソースコード貼るのめちゃ大変 2.確かにLINQはちょっと遅い、遅いけど、、、 * 読みやすい(生産性向上) * 遅延評価(省メモリ、無限ループもいけちゃう) * だいたい1億件ループとか業務でしないし * 並列処理はLINQ関係なく難しい 学び 16CONFIDENTIAL
18.
© 2019 Core
Concept Technologies Inc. 1.PowerPointにソースコード貼るのめちゃ大変 2.確かにLINQはちょっと遅い、遅いけど、、、 * 読みやすい(生産性向上) * 遅延評価(省メモリ、無限ループもいけちゃう) * だいたい1億件ループとか業務でしないし * 並列処理はLINQ関係なく難しい 3.でも確かに良くない書き方はあって。。。 学び 17CONFIDENTIAL
19.
© 2019 Core
Concept Technologies Inc. やりがち1 18CONFIDENTIAL sw.Restart(); var result_11_1 = listRandom.Where(x => x % 123 == 0).Select(x => x * x); if(result_11_1.Count() > 0) { } sw.Stop(); Console.WriteLine("time-11-1 : " + sw.Elapsed); sw.Restart(); var result_11_2 = listRandom.Where(x => x % 123 == 0).Select(x => x * x); if (result_11_2.Any()) { } sw.Stop(); Console.WriteLine("time-11-2 : " + sw.Elapsed); 存在チェックしたいだけなのにCountしちゃう time-11-1 : 00:00:00.6972058 time-11-2 : 00:00:00.0001552
20.
© 2019 Core
Concept Technologies Inc. やりがち2 19CONFIDENTIAL 全部処理する必要ないのにListで受けちゃう sw.Restart(); var result_12_1 = listRandom.Where(x => x % 123 == 0).ToList(); double sum1 = 0; foreach (var i in result_12_1) { // 合計が1億超えたら終了みたいな sum1 += i; if (sum1 > 10000000) { break; } } sw.Stop(); Console.WriteLine("time-12-1 : " + sw.Elapsed); sw.Restart(); var result_12_2 = listRandom.Where(x => x % 123 == 0); double sum2 = 0; foreach (var i in result_12_2) { // 合計が1億超えたら終了みたいな sum2 += i; if (sum2 > 10000000) { break; } } sw.Stop(); Console.WriteLine("time-12-2 : " + sw.Elapsed); time-12-1 : 00:00:00.6682446 time-12-2 : 00:00:00.0001236
21.
© 2019 Core
Concept Technologies Inc. やりがち3 20CONFIDENTIAL 途中まで同じなのに遅延評価しちゃう sw.Restart(); var result_13_11 = listRandom.Where(x => x % 123 == 0).Where(x => x > 0).Count(); var result_13_12 = listRandom.Where(x => x % 123 == 0).Where(x => x > 0).Max(); var result_13_13 = listRandom.Where(x => x % 123 == 0).Where(x => x > 0).Min(); sw.Stop(); Console.WriteLine("time-13-1 : " + sw.Elapsed); sw.Restart(); var temp = listRandom.Where(x => x % 123 == 0).Where(x => x > 0).ToList(); var result_13_21 = temp.Count(); var result_13_22 = temp.Max(); var result_13_23 = temp.Min(); sw.Stop(); Console.WriteLine("time-13-2 : " + sw.Elapsed); time-13-1 : 00:00:02.4088091 time-13-2 : 00:00:00.8282709
Download now