![]() |
特集 次期Visual Studio 2010と.NET Framework 4.0の新機能 デジタルアドバンテージ 一色 政彦2009/01/09 |
|
|
本稿では、次期Visual Studio 2010(以降、VS 2010)および.NET Framework 4.0(以降、.NET 4)の新機能を概観する。C# 4.0、Visual Basic 10については、本稿では紹介しない。
なお、本稿はPDC(Professional Developers Conference) 2008の内容をベースにしており、製品版が必ずしもこのとおりになるとは限らないことは注意してほしい。本稿で紹介した機能が、実際の製品では搭載されないことはあり得る。
それでは基本ライブラリそして.NETアプリケーションの実行エンジンである.NET 4の新機能から見ていこう。
※以降、「アプリケーション」はすべて「アプリ」と短く記述する。
■次期「.NET Framework 4.0」の新機能
次期.NET 4における機能群を簡単にまとめると、以下の構成図のようになる。
![]() |
| .NET Framework 4.0の構成図 |
| Data ServicesやEntity Frameworkは.NET Framework 3.5 SP1で追加された機能。詳しくは「特集:Visual Studio 2008 SP1概説」を参照されたい。 |
既存の.NET Framework 3.5 SP1までと比較し、この図で目新しいのは、次の4点だ。これらが.NET 4で追加される。
- Dynamic Language Runtime(DLR)
- Managed Extensibility Framework(MEF)
- Parallel Extensions(並列プログラミング)
- “Velocity”(分散キャッシュAPI)
まずは注目すべき.NET 4での機能強化についていくつか紹介し、その後、上記の4点をそれぞれ紹介する。
●WPF(Windows Presentation Foundation)の強化
.NET 4のWPFでは、マルチタッチ機能(Multi-Touch APIとコントロール群)がサポートされる。また、(Silverlight 2ですでにサポートされている)Deep Zoomもサポートされる。
また、現在DataGrid/DatePicker/Calendarコントロールや、(Silverlight 2にはすでに搭載されている)VisualStateManager(=視覚情報を管理する機能)が「WPF Toolkit」として試験的に提供されているが、これらが正式にWPFに組み込まれる。
さらに、(Office 2007で搭載されたような)Ribbon(リボン)コントロールが使えるようになる(詳しくは「特集:次期Windows 7とOffice 14はどう進化するのか?」を参照してほしい)。次の画面は実際にRibbonコントロールやDataGridコントロールを利用しているWPFのサンプル・アプリだ。
![]() |
| WPFリボン・コントロール(WPF Toolkitのサンプルより) |
●複数のCLRのロード
.NET 4では、基礎エンジン部分にも改良が加えられ、同じプロセスに(.NET 2〜3.5の)「CLR 2」と(.NET 4の)「CLR 4」の両方をロードできるようになる。
つまり例えば、CLR 2向けに作成したアドインなどのプログラムがあったとして、これをロードするには、従来、最新のCLR上で実行できるようにアップデートしなければならなかったが、次期.NET 4では同時にそれぞれのCLRをロードして同じアプリ内で異なるCLRを利用できる。
●Dynamic Language Runtime(DLR)
.NET 4は前掲の図で分かるように、コアに「Dynamic Language Runtime」(動的言語ランタイム。以降、DLR)を含んでいる。これにより、IronPython(アイアンパイソン)やIronRuby(アイアンルビー)やJavaScriptのような動的言語が.NET Framework上で使えるようになる。
●Managed Extensibility Framework(MEF)
.NET 4には、アプリの実行時に動的に機能を追加・拡張できる「Managed Extensibility Framework」(以降、MEF)が搭載される。これにより、アプリに標準的なプラグイン・モデルを簡単に実装できるようになる。クライアント・アプリ、サーバ上のWebアプリ、Silverlightアプリなどで利用可能だ。
以下の画面はMEFの(プレビュー版に含まれる)サンプル・アプリである。このアプリ(XFileExplorer)は、Windowsエクスプローラのようなフォルダ/ファイルを操作するためのもので、WPFで作られている。
![]() |
| MEFに対応したWPFアプリ(XFileExplorer) |
このアプリでは、「Addins」フォルダにプラグインである「XFileExplorerComponents.dll」ファイルを追加すると、その場で次の画面のように[Size Pane]タブが表示され、その機能が実行できる。これはMEFで行えることの一例である。
![]() |
| MEFにより機能が拡張されたWPFアプリ(XFileExplorer) |
●Parallel Extensions(並列プログラミング)
近年のCPUの性能向上は目覚ましいが、それに加えて最近はCPUのプロセッサ・コアを複数にして並列動作させるマルチコア(2つのデュアル・コアや、4つのクアッド・コア)が発達してきている。最近はさらにその勢いが増しており、「Multi」(複数)から「Many」(たくさん)へと進化しようとする動きがある。
このようなハードウェア側の進化に合わせ、ソフトウェア側でもそれを徹底的に活用する「並列プログラミング」が最近注目を集めている。特に複雑なアルゴリズムや巨大なデータ群を取り扱うときには、並列プログラミングが有用である。複数のプロセッサ・コアで並列にそれらを処理するとパフォーマンスが向上するからだ。
しかしながら実際にマルチコアの利点を生かすようなマルチスレッドのコードを書くのは簡単ではない(実装したとして、一見正常に動いているように見えても、特定の条件でエラーが発生するようなことが起こりやすい)。
そこで、並列処理機能が言語そのものに組み込まれている「Erlang」(アーラン)などのプログラミング言語が最近注目されてきているが(例えばTwitterの一部はErlangで書かれているらしい)、.NETもこの流れに素早く対応しようと考えているようで、それが.NET 4の「Parallel Extensions」(並列処理拡張)という形で実現されている。
Parallel Extensionsは主に次の2つの機能を提供する。
- Task Parallel Library(タスク並列処理ライブラリ。以降、TPL)
- Parallel LINQ(並列処理LINQ。以降、PLINQ)
いずれの機能も.NETのコアに組み込まれる(TPLはmscorlib.dll、PLINQはSystem.Core.dll)。
TPLでは、標準のコードとほとんど同じ構文やキーワードで、処理コードを簡単に並列処理に対応させられる。例えば次のコードのようにforループがあり、そこで非常に負荷の高い処理をしていると仮定する。
|
|
| シングルコアで単独処理を行うfor文のコード例(C#) |
通常、このようなコードだとマルチコアのマシンであってもシングルコア(=1つのプロセッサ・コア)で処理してしまう。このため、1つのプロセッサ・コアは多忙でも、ほかのプロセッサ・コアは暇である可能性が高い。
しかしこのときの処理は、ほかのプロセッサ・コアにも振り分け、並列して行った方が、パフォーマンスが向上するケースがある。このような場合、次のように書き換えることで、TPLを使った並列処理を実現できる。
|
|
| マルチコアで並列処理を行うParallel.For文のコード例(C#) |
見て分かるように、「for文」を「Parallelクラス(System.Threading名前空間)のForメソッド」に置き換えているだけで、行数は同じだ(ただし、ループする処理コード部分は匿名メソッドになっている)。たったこれだけで、並列処理に対応できる。なお、ParallelクラスにはForメソッド以外にも、ForEachメソッドやInvokeメソッドなどがある。
また、TPLのTaskクラス(System.Threading.Tasks名前空間)を使って、複数のタスク(=処理作業)を並列処理することもできる。次のコードは3つのタスクを同時に並列処理している。
|
|
| マルチコアで並列処理を行うTaskクラスのコード例(C#) |
続いてPLINQだが、名前から分かるように言語に組み込まれているデータ・アクセス技術のLINQを並列処理に対応させる新機能だ。次のコードは、従来のLINQの実装例である。
|
|
| LINQコードの例(C#) |
これを次のコード例のように「.AsParallel()」というキーワードを付け加えるだけで、そのデータ処理が並列化されるようになる。
|
|
| PLINQコードの例(C#) |
●“Velocity”(分散キャッシュAPI)
頻繁なデータ・アクセスは、パフォーマンスのボトルネックになることが多い。例えば多くのWebアプリは、RDBMS(やハード・ディスク上のファイル)にデータを保存しておき、閲覧者からアクセスがあるたびにそのデータを取得しようとする。このデータが大容量だったり、アクセスが集中し出したりすると、RDBMSへの負荷が高まり、結果的にWebサイトの反応が遅くなることがある。
このような場合、データを(データベースやファイルではなく)複数のサーバに分散させてインメモリのキャッシュとして保持しておき、通常のデータ・アクセスは、クラスタリング(=多重化)され1つのビューに統合されたその分散キャッシュ(Distributed Cache)に対して行うようにするという手法が考えられる。こうすることで、データベースやファイルといったデータソースからのデータ取得を必要最小限に減らせる。この手段を提供するのが、分散キャッシュ・サービスである“Velocity”(コード名)だ。
“Velocity”は、最近人気を集めている「memcached」の類似技術で(参考:「gihyo.jp:memcachedを知り尽くす」)、複数のキャッシュ・サーバ(=“Velocity”サービス)を1つのキャッシュ・クラスタとして構成する機能や、分散キャッシュへアクセスするためのAPIを提供する。
“Velocity”の利点は、分散キャッシュへのアクセスが自動的にロード・バランスされ、複数のサーバに負荷が分散されるので、高いパフォーマンスの向上を期待できること。そして、たとえ負荷が増大してきても、キャッシュ・サーバを増やすことでそれに柔軟に対応できるので、スケーラビリティも確保できることだ。
この“Velocity”は現在、単独でCTP版が公開されているが、.NET 4にはそのAPIが搭載される。具体的に、.NET 4でこの分散キャッシュにアクセスするには、次のコードのように、CacheFactoryクラス(System.Data.Caching名前空間)のインスタンス(=キャッシュ・クラスタ)から特定のキャッシュ(この例では「cacheName」)のオブジェクトを取得し、それを使ってデータを追加したり(=Addメソッド)、更新したり(=Putメソッド)、取得したり(=Getメソッド)、削除したり(=Removeメソッド)できる。
|
|
| 分散キャッシュにアクセスするための実装コード(Default.aspx.cs) |
なお、上記のコードではCacheFactoryクラスのインスタンスを生成してキャッシュ・クラスタのオブジェクトを取得しているが、このキャッシュ・クラスタ(と、それに含まれるキャッシュ・サーバ群)はアプリケーション構成ファイル(app.config/Web.config)などで定義できる(“Velocity”のプログラミングに関する詳細はMSDNを参照してほしい)。
続いて、次期「Visual Studio 2010」の新機能を紹介していこう。
| INDEX | ||
| [特集] マイクロソフトの開発ツール戦略 | ||
| 次期Visual Studio 2010と.NET Framework 4.0の新機能 | ||
| 1.次期「.NET Framework 4.0」の新機能 | ||
| 2.次期「Visual Studio 2010」の新機能(IDE編) | ||
| 3.次期「Visual Studio 2010」の新機能(開発言語編/設計機能編)、そのほか | ||
ホワイトペーパー(TechTargetジャパン)
- LocalConnection APIと動的なスタイリング (2010/2/9)
Webページ上の複数のSilverlightアプリ間でメッセージ通信をする方法とは? コントロールの見た目を動的に設定する方法とは? - ASP.NET MVC 2:モデルの検証 (2010/2/8)
ASP.NET MVC 2で導入される入力検証機能を使った実装を紹介。シンプルな属性の追加によるエレガントな実装が可能となっている - ASP.NETによる3階層Webアプリ「ITブック」構築 (2010/2/5)
ちょっとした改造で、あなたのWebアプリは劇的に使いやすく、かっこよくなる。まずは元となるWebアプリを標準的手法で構築 - .NET TIPS - .NET開発のテクニックとヒント集 - (2010/2/4)
− カスタムMVCビューエンジンを利用するには?(活用編)
− フォーム全体へのドッキングでつまみを表示するには?
− リストボックスでTextBlockの文字列を折り返すには?
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
未来展望台コーナースポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |












