troushoo

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Visual Studioの並列スタック (Visual Studio 2012からの新機能含む)

並列スタックはVisual Studio 2010から導入された機能で、Visual Studio 2012で機能が拡張されています。
以下、まず並列スタックとは?を紹介し、その後Visual Studio 2012での新機能を紹介します。

今回使用するサンプルコード
以下のサンプルアプリを使用して並列スタックの機能を見てみます。
このコードは、2種類のスレッドを作成しています。
   1. メソッドA1() –> メソッドA2() –> メソッドA3()、とたどるスレッドThread_AとThread_Bを作成
   2. メソッドa1() –> メソッドa2()、とたどるスレッドThread_aを作成

using System.Threading;
 
namespace MyParallelStacks
{
    class Program
    {
        static void Main(string[] args)
        {
          //同じコールスタックをたどるThread_aを作成
            Thread Thread_a = new Thread(new ThreadStart(a1)); Thread_a.Start();
            
          //Thread_aとは異なるスタックをたどる、同じコールスタックをたどる、Thread_AとThread_ADashを作成
            Thread Thread_A = new Thread(new ThreadStart(A1)); Thread_A.Start();
  Thread Thread_ADash = new Thread(new ThreadStart(A1)); Thread_ADash.Start();
 
        }
 
       //Thread_AとThread_ADashが使用するメソッド
   private static void A1()
        {
            A2("A2");
        }
        private static void A2(string s)
        {
            A3("A3");
        }
        private static void A3(string s)
        {
            System.Console.WriteLine(s);
        }
 
 
        //Thread_aが使用するメソッド
   private static void a1()
        {
            a2("a2");
        }
        private static void a2(string s)
        {
            Thread.Sleep(3000);
            System.Console.WriteLine(s);
        }
    }
}
以下、A3()のSystem.ConsoleWriteLine(s)(=上記コードの緑色の部分)でブレークポイントを張った状態を考えます。
すなわち、Thread_A、Thread_B、Thread_aが作成された後の状態です。

並列スタックとは?
並列を起動するには、デバッグ中に、デバッグ-> ウィンドウ –> 並列スタック をクリックすることで起動できます。
並列スタックの起動
起動後、以下のように並列スタックのウィンドウが表示されます。
並列スタックより、A1() –> A2() –> A3()とたどるスレッドが2つと、a1() –> a2()とたどるスレッドが1つ作成されていることがわかります。
並列スタック
このように並列スタックを用いると、マルチスレッドアプリケーションの可視化に役に立ちます。

並列スタックの機能
・引数やスレッドIDの確認
引数やスレッドIDの確認を行うことができます。
1. 並列スタックのウィンドウを右クリックし、”パラメーター値の表示”にチェックを入れる。
パラメーター値の表示
2. メソッドにマウスカーソルを乗せる。
以下のように、引数やスレッドIDの確認ができます。
引数やスレッドIDの確認

・コンテキストの切り替え
メソッドをダブルクリックすると、そのメソッドにコンテキストが切り替わります。
以下は、A2()をダブルクリックしたところです。
A2()に対して緑色の矢印が表示され、カレントコンテキストがA2()であることが表示されます。
(黄色の矢印は、現在のアクティブなメソッドを意味します。)
カレントコンテキストの変更
カレントコンテキストを変更することで、例えば、メソッドのローカル変数がわかります。
上図より、A2()のローカル変数sの値が、A2であることがわかります。

・スレッドの切り替え
コンテキストのみならずスレッドを切り替えることもできます。
1. メソッドにマウスカーソルを乗せ、左から二番目の空白をダブルクリック
カレントスレッドの切り替え
2. スレッドが切り替わる
矢印の位置が変わったことから、カレントスレッドが切り替わったことが確認できます。
カレントスレッドの切り替え

・メソッドビューの切り替え
メソッドビューの切り替えで、スタックビューとメソッドビューとを切り替えることができます。
メソッドビューの切り替え
スタックビューは上で示してきた図の通り、コールスタックが同じものをまとめて表示します。
メソッドビューにすると現在のメソッドを中心としたグラフとなります。
以下は、A2()を現在のメソッドとしてメソッドビューとしたところです。A2()を中心としたグラフが表示されます。
メソッドビュー

・フラグ
フラグをつけたスレッドのみ表示させることができます。
1. 任意のメソッドにマウスカーソルを乗せて、旗のアイコンをクリック
旗のアイコンをクリック
2. “フラグが設定されたもののみ表示”をクリック
フラグが設定されたもののみを表示
3. フラグが設定されたもののみが表示される
フラグを設定したもののみが表示される

・拡大・縮小
拡大・縮小が可能です。 拡大・縮小するには、左側に表示されているスライドを移動します。
拡大・縮小のためのスライド

並列スタックのVisual Studio 2012での新機能
Visual Studio 2012より、複数のプロセスの並列スタックを同時に表示できるようになりました。
以下は、Visual Studio 2012での画面です。複数のプロセスに対して並列スタックが表示されていることがわかります。
Visual Studio 2012での並列スタック
以下は、Visual Studio 2010での画面です。上図と全く同じコードですが、1つのプロセスに対してのみ並列スタックが表示されていることがわかります。
Visual Studio 2010での並列スタック

リンク
・[並列スタック] ウィンドウの使用
http://msdn.microsoft.com/ja-jp/library/dd998398.aspx
・What’s New For Parallelism in .NET 4.5
http://blogs.msdn.com/b/pfxteam/archive/2011/09/17/10212961.aspx


  1. 2012/09/01(土) 13:33:20|
  2. Visual Studio
  3. | トラックバック:0
  4. | コメント:0
<<PsExecを使用した3つの上級テクニック | ホーム | コマンドプロンプトの利用時に役立つ12のTips (2)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/75-c398594f
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (92)
ネットワーク (76)
Visual Studio (56)
SOS・Psscor2/Psscor4 (25)
WinDbg (25)
Linux (24)
Azure (17)
Tips (20)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。