Enviar pesquisa
Carregar
C#で速度を極めるいろは
•
Transferir como PPTX, PDF
•
3 gostaram
•
10,779 visualizações
Core Concept Technologies
Seguir
【高速化】C#コンパイラとランタイムのJITとフレームワークの実装に焦点を合わせて、高速なコードの書き方についてTipsを紹介します。C#で基盤やライブラリを作る人向けです。
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 12
Baixar agora
Recomendados
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
KageShiron
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
最速C# 7.x
最速C# 7.x
Yamamoto Reki
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
UnityTechnologiesJapan002
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
Recomendados
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
KageShiron
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
最速C# 7.x
最速C# 7.x
Yamamoto Reki
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
UnityTechnologiesJapan002
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
async/await のしくみ
async/await のしくみ
信之 岩永
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
Yuki Tamura
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
こわくない Git
こわくない Git
Kota Saito
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
Unity Technologies Japan K.K.
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
SEGADevTech
C#とILとネイティブと
C#とILとネイティブと
信之 岩永
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
johgus johgus
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
Mais conteúdo relacionado
Mais procurados
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
async/await のしくみ
async/await のしくみ
信之 岩永
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
Yuki Tamura
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
こわくない Git
こわくない Git
Kota Saito
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
Unity Technologies Japan K.K.
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
SEGADevTech
C#とILとネイティブと
C#とILとネイティブと
信之 岩永
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
Mais procurados
(20)
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
async/await のしくみ
async/await のしくみ
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Twitterのsnowflakeについて
Twitterのsnowflakeについて
C++ マルチスレッド 入門
C++ マルチスレッド 入門
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
こわくない Git
こわくない Git
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
【CEDEC2018】CPUを使い切れ! Entity Component System(通称ECS) が切り開く新しいプログラミング
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
C#とILとネイティブと
C#とILとネイティブと
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
Semelhante a C#で速度を極めるいろは
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
johgus johgus
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
civic Sasaki
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在
TomomitsuKusaba
Pythonにおけるデバッガツールpdbについて
Pythonにおけるデバッガツールpdbについて
Ryota Sakamoto
初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptx
Akifumi Niida
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート
TomomitsuKusaba
Boost.勉強会 #13 @仙台 鳥小屋
Boost.勉強会 #13 @仙台 鳥小屋
Yuto M
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
Hisateru Tanaka
自宅サーバーを立てる話
自宅サーバーを立てる話
naba0123
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
shinjiigarashi
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
ゆるかわPhp
ゆるかわPhp
Ryota Mochizuki
Power shell で DSL
Power shell で DSL
urasandesu
Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?
Kei Mikage
俺とCiとinfrastructure as code(未完)
俺とCiとinfrastructure as code(未完)
Masayuki KaToH
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Y Watanabe
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
20190920 hannaripython20
20190920 hannaripython20
Otazo Man
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
Masahito Zembutsu
Semelhante a C#で速度を極めるいろは
(20)
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
PHPからC#のライブラリを呼べるようにしたdotnet_ffiを趣味でつくってみた
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在
Pythonにおけるデバッガツールpdbについて
Pythonにおけるデバッガツールpdbについて
初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptx
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート
Boost.勉強会 #13 @仙台 鳥小屋
Boost.勉強会 #13 @仙台 鳥小屋
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
自宅サーバーを立てる話
自宅サーバーを立てる話
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
ゆるかわPhp
ゆるかわPhp
Power shell で DSL
Power shell で DSL
Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?
俺とCiとinfrastructure as code(未完)
俺とCiとinfrastructure as code(未完)
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
20190920 hannaripython20
20190920 hannaripython20
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
元運用担当者が,現役時代に本当に欲しかったもの. Osc2014 kansai@kyoto terraform introduction
Mais de Core Concept Technologies
センシングサイエンティストが経費精算を自動化したらこうなった
センシングサイエンティストが経費精算を自動化したらこうなった
Core Concept Technologies
コンソールアプリケーションでDIを使う
コンソールアプリケーションでDIを使う
Core Concept Technologies
開発環境をWindowsからMacに移行してみた話
開発環境をWindowsからMacに移行してみた話
Core Concept Technologies
Linqの速度測ってみた
Linqの速度測ってみた
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
Mais de Core Concept Technologies
(20)
センシングサイエンティストが経費精算を自動化したらこうなった
センシングサイエンティストが経費精算を自動化したらこうなった
コンソールアプリケーションでDIを使う
コンソールアプリケーションでDIを使う
開発環境をWindowsからMacに移行してみた話
開発環境をWindowsからMacに移行してみた話
Linqの速度測ってみた
Linqの速度測ってみた
データソースに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は何を変えたのか
C#で速度を極めるいろは
1.
C#で速度を極める いろは (前編) 2019/7/19 みんなのC# (#2) 山本
礼貴
2.
自己紹介 • コアコンセプトテクノロジー所属 • 山本
礼貴(やまもと れき) • Twitter @proprogrammer0 • ブログ C#+WPFチューニング戦記(お休み中) • C#ガチ勢 • 速いコード書きたい
3.
C#と高速化へのモチベーション • 基盤やライブラリもC#で書きたい • 32bit/64bitもCPUの種類も気にしないでも良い •
大抵保守性が高い • 速いコードを書く人を支援してくれる仕組みがある (.NET Framework 4.8 / .NET Core 2.1~ は顕著) • 中身の事を知っていると、適切な書き方を容易に選べる
4.
効果的に高速化したい • 80:20の法則とかパレートの法則とか言うけど 「20%のコードが処理時間の80%を占める」 • だから頻度の高い20%のコードを高速化すると速くなる •
基盤とかライブラリ • プロファイルやベンチマークして、最適化すべきところを見つ けよう(思い込みでやるのはダメ) • ループ処理が大半なのでループのことを考えよう ~何を参考にしたらいいだろう~
5.
LINQとループを 知る ループそのものを高速化するヒントを得る
6.
LINQの中身 • その合理的な実装を実際に読んでみる • 正しく使うため •
正しく応用するため(高速化のための重要なノウハウがある) • MicrosoftのReferenceSourceやGitHubの.NET Coreのソースは 宝の山 • ジェネリックとラムダが使えるようになってからのものは特に素晴ら しい • 「いろは」なので着目点を勢いよく紹介!
7.
LINQの中身 • Whereメソッドの中身 • T配列が最速、次はList<T>、次はIEnumerable<T> という風に個別実装している これのおかげで高速だったりメモリ効率が良かったり 配列より速い実装 が可能な場合、 Iterator<T>を実装 する余地もある
8.
LINQの中身 • Select().Where() より
Where().Select() の方が速い • 計算から除外するものを最初に捨てるほうが速いのは道理 • だけどそれだけではない • WhereSelectArrayIterator WhereSelectListIterator WhereSelectEnumerableIterator • LinqでWhere().Select()と連続して書くとこれらのクラスが作られて、 1イテレーションで Where+Selectの処理をしてくれる • イテレーターもコレクションの種類ごとにある
9.
配列へのfor() vs foreach() •
昔は明確に差がありforが高速と言われていた • 今(.NET Framework 4.8/Core 2.1~)は誤差レベルの差しかない • 配列の境界(OutOfRange)判定はJITが結構マメに省略してくれる • foreach も境界判定が省略される • Span<T>, ReadonlySpan<T> に対する foreach()もほぼ等速 • つまりindex を使いたいか/中身を書き換えるかで選択するのが 最良となった • なおJITが特別扱いしているのは配列とSpan<T>だけ(重要)
10.
配列とSpan<T>と境界判定 • 配列の一部に処理をする場合 • array[index]と書くと、その都度境界判定が入るので遅くなる •
同メソッド内で明確に0~array.Lengthだと分かる場合は境界判定を省いてくれ ることがある • Span<T>は生成時1回しか境界判定しない • それ以降は特別扱いしてくれるので境界判定がない • var span = array.AsSpan(1, array.Length - 1); • array.Skip(1)と同じものを列挙できるが速度はAsSpanが圧勝する
11.
LINQとループを知る-まとめ • LINQでもループでも、配列に対する処理をまずは速くしよう • Where→Selectを続けて処理 •
LINQの実装は高速化の際にとても参考になる • Indexがほしいときだけfor、それ以外はforeach • 配列の部分切り出しにはAsSpan
12.
後編につづく… ループの中身を高速化するにはどうしたらいいんだ… GCフリーという高速化の魔窟へようこそ
Baixar agora