Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
C#アプリの高速化入門
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
moririring
December 10, 2011
Technology
1.1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
C#アプリの高速化入門
2011年12月03日わんくま同盟大阪勉強会#46で話したスピーチです。
moririring
December 10, 2011
Other Decks in Technology
See All in Technology
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
810
MCP Appsを作ってみよう
iwamot
PRO
4
540
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
600
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
100
Kubernetesにおける学習基盤とLLMOpsの概要
ry
1
250
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
120
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
5
1.3k
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
130
自律型AIエージェントは何を破壊するのか
kojira
0
150
AIはどのように 組織のアジリティを変えるのか?
junki
0
270
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
320
Amazon Bedrock AgentCore ワークショップ JAWS UG TOHOKU / amazon-bedrock-agentcore-workshop-jawsug-tohoku-2026
gawa
9
710
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.2k
Building an army of robots
kneath
306
46k
Accessibility Awareness
sabderemane
1
140
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
30 Presentation Tips
portentint
PRO
1
320
Making Projects Easy
brettharned
120
6.7k
Six Lessons from altMBA
skipperchong
29
4.3k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
130
Thoughts on Productivity
jonyablonski
76
5.2k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
C#アプリの高速化 入門 森理 麟(moririring)
自己紹介 森理 麟(moririring) 職業 : プログラマ Twitter : @moririring ブログ
: 森理 麟(moririring)のプログラマブログ 自作アプリ : クッキツイート
アジェンダ 1. 高速化とは 2. 遅いとは 3. 重いとは 4. 速いとは
1.高速化とは
ダイエット ダイエットと高速化は似ています。
計測 どちらも最初に計測が必要です。
痩せる 適切な方法でサイズを痩せる必要があります。
リバウンド 痩せてもリバウンドすることがあります。
おしゃれ うまくいかなければおしゃれでごまかしましょう
まとめ 速くするのは大変です。 速くするだけが高速化ではありません。 遅くしないことも高速化です。 遅く感じさせないことも高速化です。
2.遅いとは What slow does it mean ?
遅いとは 遅いとはどういうことでしょうか?
遅いとは 遅いとはアクションからリアクションまでの 時間が遅いことです。
遅い処理はまとめる 遅い処理はボタンにまとめてしまいましょう。
遅い処理を分かりやすくする 押したら、押せない状態にしましょう。
押せない状態にするソース private void Button_Click(object sender, EventArgs e) { Button.Enabled =
false;//ボタンを押せない状態にする //重い処理 for(int i = 0; i < 10000000; i++); Button.Enabled = true; //ボタンを押せる状態に戻す }
デモ1 DEMO1
デモ… 押せない状態にしました。でも…
処理中を表示する 次は別ウィンドウで「処理中」を表示しましょう。
処理を表示するソース private void Button_Click(object sender, EventArgs e) { Form2 form
= new Form2(); form.Show(); //モーダルダイアログ //重い処理 for(int i = 0; i < 10000000; i++) { form.Update(); }; form.Close(); }
デモ2 DEMO2
まとめ • 遅いとはアクションからリアクションまでの 時間が遅いこと • 遅い処理はボタンにまとめる • ボタンを押したら、押せない状態にする • 別ウィンドウで表示すれば目立つ
3.重いとは? What heavy does it mean?
重いとは? 重いとはアクションからリアクションの間に 操作ができなくなることです。
マルチスレッド 重くても、操作ができる方法があります。 それがマルチスレッドです。
BackgroundWorker BackgroundWorkerコンポーネントを使えば、 比較的簡単にマルチスレッド化が出来ます。
処理を分ける ポイントは処理を3つの関数に分けることです。 開始、実装、終了です。
3つに分けたソース private void button1_Click(object sender, EventArgs e) { button1.Enabled =
false; backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { for(int i = 0; i < 10000000; i++); } private void backgroundWorker1_RunWorkerCompleted(object sender, DoWorkEventArgs e) { button1.Enabled = true; }
デモ3 DEMO3
さらにBackgroundWorker マルチスレッドしかできない表現があります。 それが進行状況の表示とキャンセルです。
実装処理の追加 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { for (int
i = 1; i <= 10; i++) { System.Threading.Thread.Sleep(1000); //キャンセル処理されたかチェック if (backgroundWorker1.CancellationPending) { e.Cancel = true; return; } //進行状況を渡す backgroundWorker1.ReportProgress(i); } }
追加処理のソース //ボタンが押されたら private void CancelButton_Click(object sender, EventArgs e) { toolStripProgressBar1.Visible
= false; CancelButton.Enabled = false; //キャンセル処理 backgroundWorker1.CancelAsync(); } //進行状況の表示 private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { toolStripProgressBar1.Value = e.ProgressPercentage; }
デモ4 DEMO4
まとめ • 重いとはアクションからリアクションまでの間に 操作ができなるくなること • 重い場合はマルチスレッドにする • BackgroundWorkerでマルチスレッド • 進行状況の表示とキャンセルも可能
4.速いとは? What fast does it mean?
速いとは? 速いとは決められた時間で沢山が処理が出来 ることです。
速くするには VisualC#2010は、ものすごく簡単に沢山処理さ せる方法があります。 それがマルチコアです。
実装方法 マルチコアの実装は簡単です。 //このループを for (int i = 0; i <=
10; i++){処理} ↓ //このように置き換えるだけ Parallel.For(0, 10, i =>{処理}); これだけで驚く程速くなります。
デモ5 DEMO5
但し 実装的には置き換えだけで行けるのですが、 描画の際は気をつけることがあります。
デモ5 (失敗バージョン) DEMO5 Failed Version.
マルチコアソース Parallel.For(0, 10, i => { System.Threading.Thread.Sleep(1000); if (backgroundWorker1.CancellationPending) {
e.Cancel = true; return; } backgroundWorker1.ReportProgress(i); });
ソース static int conuter = 0; private void button1_Click(object sender,
EventArgs e) { conuter = 0; backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { conuter++; toolStripProgressBar1.Value = conuter; }
まとめ • 速いとは決められた時間内で沢山処理 が出来ること • VisualC#2010なら簡単マルチコア • ループをParalle.Forにするだけ • 但しインデックスナンバーに気をつける
総括 • 高速化は速くすることだけではない • マルチスレッドならBackgroundWorker • マルチコアならVisualC#2010 • 3秒以上画面で何も動いていない時に高 速化は必須
以上 ご清聴ありがとうございました