TeraOmegaNetwork 2.0
<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

macでVS2010
iPadでVS2010
ミニノートPCでVS2010
C# 3.0 LINQ Sort
ぱられる。ふぉー
Parallel.For
C#4.0 続2 Parallelクラス
C#4.0 続 Parallelクラス
Internet Explorer の検索ボックスを表示しない
2010年度になりました

プログラミング
・C#
・C/C++
・Java
・Visual Basic
・Visual Basic .NET
・色々な言語
・メモ
管理人の落書き
リンク
テンプレート作成支援言語
IEAuto
クラス設計






Web デベロッパー

必要科目
70-536
70-528
70-547



・Sun認定Javaプログラマー(SJC-P 035)
・OracleSilverFaeroe 9i
・UMTP Lv1
・基本情報技術者


・セキュリティスペシャリスト合格
・テンプレート作成支援言語(T言語)を広める事

  お勧め1「テンプレート作成支援言語(T言語)」ver 1.1.1         20010/02/26 更新
テンプレート作成支援言語について
ダウンロードする。

お勧め2「ブラウザ自動操作ツール(IEAuto2009)」ver 1.6.1    20010/03/25 更新
ブラウザ自動操作ツール(IEAuto 2009)について
ダウンロードする。

お勧め3
「データベース更新前更新後比較ツール(DBCMP) Oracle接続可」ver 1.4.0  20010/03/14 新規公開
ダウンロードする。

プログラミング - C#
C#4.0 続 Parallelクラス

Parallelクラスを使って、マルチスレッドで計算させた場合、
変数への排他制御をかけないと、とんでもない結果を出してしまいます・・・。
なので、ロックを使って制御をかけてみると、すべてのCPUのコアで処理は動くのですが、
普通のfor文で計算した方が早い結果に。


C#4.0 続 Parallelクラス
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
using System;
using System.Collections.Generic;
using System.Windows.Forms;

using System.Threading.Tasks;

namespace MultithreadTest {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        //いつものfor文
        private void button1_Click(object sender, EventArgs e) {
            long start = System.Environment.TickCount;

            List<int> lst = new List<int>();

            for(int i = 0; i < 10000000; i++) {
                lst.Add(i);
            }

            long sum = 0;
            foreach(int num in lst) {
                sum += num;
            }

            long stop = System.Environment.TickCount;

            label1.Text =  (stop - start) + " ミリ秒です。"; //250ミリ秒
        }

        //Parallelクラスを使用
        private void button2_Click(object sender, EventArgs e) {
            long start = System.Environment.TickCount;

            List<int> lst = new List<int>();

            Parallel.For(0, 10000000, i => {
                lock(this) {
                    lst.Add(i);
                }
            });

            long sum = 0;
            Parallel.ForEach(lst, num => {
                lock(this) {
                    sum += num;
                }
            });

            long stop = System.Environment.TickCount;

            label2.Text = (stop - start) + " ミリ秒です。"; //1800ミリ秒
        }
    }
}



クリックすると拡大します。
一瞬100%近くまで行きます!(CPU … Core2 Quad 9450)

実際、for文で処理するとCPU使用率5%ぐらいで終わりますが・・・。

・検索キーワード:  C# 4.0, Parallelクラス

戻る  マイリストへ追加