Parallel Extensions (並列プログラミング。タスク、同時実行コレクション、および Coordination Data Structures) サンプル: IEnumerable<BabyInfo> Search(IEnumerable<BabyInfo> babies, QueryInfo qi) { var results = new ConcurrentStack<BabyInfo>(); Parallel.ForEach(babies, baby => { if (baby.Name == qi.Name && baby.State == qi.State) { results.Push(baby); } }); return results; } PLINQ による並列処理 IEnumerable<BabyInfo> Search(IEnumerable<BabyInfo> babies, QueryInfo qi) { return from baby in babies.AsParallel() where baby.Name == qi.Name && baby.State == qi.State && baby.Year >= qi.YearStart && baby.Year <= qi.YearEnd orderby baby.Year ascending select baby; } Task †複数のロジックを並列処理することもできる。 Task task1 = Task.StartNew(delegate { // 重い処理1 }); Task task2 = Task.StartNew(delegate { // 重い処理2 }); Task task3 = Task.StartNew(delegate { // 重い処理3 }); LazyInit<T> †.NET Framework には、スレッドセーフ遅延初期化の最も一般的なパターンを簡単にする LazyInit<T> 型が含まれます。LazyInit<T> の Value プロパティにアクセスすると、初期化がまだ行われていない場合は初期化が強制的に行われ、初期化されたデータが返されます。アプリケーションは、複数のスレッドによる Value の取得が競合する場合でも、その正確さを維持します。 ThreadStaticAttribute †静的フィールドの値がスレッドごとに一意であることを示します。 hreadStaticAttribute でマークした static フィールドは、複数のスレッド間で共有されません。 実行中の各スレッドは、そのフィールドのインスタンスを個別に持ち、そのフィールドに対して独自に値を設定および取得します。 このフィールドに別のスレッドからアクセスすると、フィールドには別の値が格納されます。 使用例: [ThreadStatic] private static MyData _d5 = new MyData(); SyncLock http://msdn.microsoft.com/ja-jp/library/3a86s51t(v=vs.80).aspx 用語 †TPL (Task Parallel Library) ★月額105円~/容量最大30GB/機能満載! ロリポップ!レンタルサーバー ★ コメント: |