読者です 読者をやめる 読者になる 読者になる

プログラミングでアイデアを具現化したい

あらゆるものを具現化するためにプログラミングを始めました。主にC#

C# 非同期処理と並列処理(今回は同期処理、シングルコアに対しての負荷テスト)


C#によるマルチコアのための非同期/並列処理プログラミングより

Formアプリケーションなど、重い処理は非同期処理にしておかないと
アプリが固まったようになったり、レスポンス、操作性が悪くなるため、
スピンオフで非同期処理についても理解を深めていきます。


アプリに求められること

  • 「フリーズ」状態にならず、すぐに応答する

 ⇒非同期処理にする

  • パフォーマンスが良い

 ⇒並列処理をする(マルチコア)


まずは単純に1コアをフルに使うプログラムを作ります。

using System;
using System.Windows.Forms;

namespace StressTest {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }
        bool testMode;
        private void button1_Click(object sender, EventArgs e) {
            double r = 0.0;
            testMode = true;
            while (true)
                for(int i = 1; i <= int.MaxValue; i++) {
                    for(int j = 1; j <= int.MaxValue; j++) {
                        if (!testMode) return;
                        r = (double)i / (double)j;
                        //負荷テスト中に画面操作する為に処理をいれる。
                        Application.DoEvents();
                    }
                }
        }
        private void button2_Click(object sender, EventArgs e) {
            testMode = false;
        }
    }
}

ひとつ実行する毎に1コアを100%使い切る
f:id:tos5511:20160211034900p:plain

何もしてない状態
f:id:tos5511:20160211034804p:plain
ストレステストを1コア(右下)にかけている
f:id:tos5511:20160211035139p:plain
ストレステストを8つ起動し、すべての論理プロセッサに負荷をかける。
f:id:tos5511:20160211040129p:plain
f:id:tos5511:20160211040153p:plain
PCでゲームしないのでcore i7のコアをフルで使い切ったのは初めてだw

次回以降(時期は未定)、マルチコアを有効に使う。
非同期処理でアプリケーションの操作性向上。
このテーマについて進めて行きたい。