SlideShare a Scribd company logo
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秒以上画面で何も動いていない時に高
  速化は必須
以上

ご清聴ありがとうございました

More Related Content

Viewers also liked

Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
bleis tift
 
これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしよう
Kouji Matsui
 
async/awaitダークサイド is 何
async/awaitダークサイド is 何async/awaitダークサイド is 何
async/awaitダークサイド is 何
Kouji Matsui
 
知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編Shota Baba
 
Unity エディタ拡張
Unity エディタ拡張Unity エディタ拡張
Unity エディタ拡張Shota Baba
 
An other world awaits you
An other world awaits youAn other world awaits you
An other world awaits you
信之 岩永
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化
COLOPL, Inc.
 
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
慎一 古賀
 
中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術
Noriaki Kadota
 
知って得するUnity エディタ拡張編
知って得するUnity エディタ拡張編知って得するUnity エディタ拡張編
知って得するUnity エディタ拡張編Shota Baba
 
はじめてのUniRx
はじめてのUniRxはじめてのUniRx
はじめてのUniRx
torisoup
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
 
каталог строительных систем
каталог строительных системкаталог строительных систем
каталог строительных системAl Maks
 
Евгений Минченко. Новые предвыборные технологии
Евгений Минченко. Новые предвыборные технологииЕвгений Минченко. Новые предвыборные технологии
Евгений Минченко. Новые предвыборные технологии
prasu1995
 
Test1
Test1Test1
Hzz ve ra birlikleri defans
Hzz ve ra birlikleri defansHzz ve ra birlikleri defans
Hzz ve ra birlikleri defans
haseleonore
 
Social Recruiting (Beginner)
Social Recruiting (Beginner)Social Recruiting (Beginner)
Social Recruiting (Beginner)
Jeff Waldman
 

Viewers also liked (20)

Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
 
これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしよう
 
Extending the Unity Editor
Extending the Unity EditorExtending the Unity Editor
Extending the Unity Editor
 
async/awaitダークサイド is 何
async/awaitダークサイド is 何async/awaitダークサイド is 何
async/awaitダークサイド is 何
 
知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編
 
Unity エディタ拡張
Unity エディタ拡張Unity エディタ拡張
Unity エディタ拡張
 
An other world awaits you
An other world awaits youAn other world awaits you
An other world awaits you
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化
 
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
本になりました! ~ チーム開発の教科書 C#によるモダンな開発を実践しよう!
 
中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術中の下のエンジニアを脱出するための仕事術
中の下のエンジニアを脱出するための仕事術
 
知って得するUnity エディタ拡張編
知って得するUnity エディタ拡張編知って得するUnity エディタ拡張編
知って得するUnity エディタ拡張編
 
はじめてのUniRx
はじめてのUniRxはじめてのUniRx
はじめてのUniRx
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
каталог строительных систем
каталог строительных системкаталог строительных систем
каталог строительных систем
 
Евгений Минченко. Новые предвыборные технологии
Евгений Минченко. Новые предвыборные технологииЕвгений Минченко. Новые предвыборные технологии
Евгений Минченко. Новые предвыборные технологии
 
Zgrow会社概要
Zgrow会社概要Zgrow会社概要
Zgrow会社概要
 
Test1
Test1Test1
Test1
 
Hzz ve ra birlikleri defans
Hzz ve ra birlikleri defansHzz ve ra birlikleri defans
Hzz ve ra birlikleri defans
 
Social Recruiting (Beginner)
Social Recruiting (Beginner)Social Recruiting (Beginner)
Social Recruiting (Beginner)
 

Recently uploaded

ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
Takuya Minagawa
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
Shinichi Hirauchi
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
Yuki Miyazaki
 
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
iPride Co., Ltd.
 
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
Seiya Shimabukuro
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
sugiuralab
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
ARISE analytics
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
Osaka University
 
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
Osaka University
 
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDDなぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
ssuserfcafd1
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
kitamisetagayaxxx
 

Recently uploaded (14)

ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
 
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
 
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
 
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
 
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDDなぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
 

C#アプリの高速化web