質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Q&A

解決済

1回答

8249閲覧

ヒープ領域のサイズ取得

ranran

総合スコア85

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

0グッド

0クリップ

投稿2015/01/08 15:58

ただいまガベージコレクションの動作について学習しております。

マネージヒープメモリがいっぱいになったらガベージコレクションが作動する、と認識していますがいまいち実感がわきません。
実際にコードを書いてヒープの状態を確認したいと思うのですがやり方がいまいちわかりません。

ヒープの状態を確認できるクラス等ありましたらご教授いただけたらと思います。
また参考になるガベージコレクションのページ等あればあわせてよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

マネージヒープの状態を確認できるライブラリとして、GCクラスがあります。
参考:GCクラス(System):http://msdn.microsoft.com/ja-jp/library/system.gc.aspx

マネージヒープに割り当てられているメモリ量は、**GC.GetTotalMemory(False)**で取得できます。

実際にマネージヒープに割り当てられているメモリ量が変化していく様子のプログラムを載せておきます。

lang

1Imports System ' GCクラスはSystem名前空間に所属しています。 2 3Module Module1 4 5 Sub Main() 6 7 ' GC.GetTotalMemory( False )でマネージヒープに割り当てられている量をバイト単位で取得し、表示します。 8 ' 注:あくまでも目安です。 9 Console.WriteLine( "Manage heap : {0} B", GC.GetTotalMemory( False ) ) 10 11 ' ガベージ用データを生成します。 12 Console.WriteLine( "Integer型配列(要素数 10万)を30回生成します。" ) 13 Dim x() As Integer 14 For index = 1 To 30 15 ReDim x( 100000 ) 16 ' そのガベージ用データが割り当てられているジェネレーション( 普通は 0 です )のガベージコレクション実行回数と、 17 ' マネージヒープに割り当てられている量を取得し、表示します。 18 Console.WriteLine( "GC Count : {0}, Manage heap : {1} B", GC.CollectionCount( GC.GetGeneration( x ) ), GC.GetTotalMemory( False ) ) 19 Next 20 21 ' ガベージ用データの変数の参照先をNothingにします。 22 x = Nothing 23 Console.WriteLine( "Integer型配列の参照先をNothingにしました。" ) 24 ' 参照先をNothingにした後のマネージヒープ割り当てられている量を取得し、表示します。 25 Console.WriteLine( "Manage heap : {0} B", GC.GetTotalMemory( False ) ) 26 27 ' ガベージコレクションを実行します。 28 GC.Collect() 29 Console.WriteLine( "ガベージコレクションを実行しました。" ) 30 ' ガベージコレクション実行後のマネージヒープ割り当てられている量を取得し、表示します。 31 Console.WriteLine( "Manage heap : {0} B", GC.GetTotalMemory( False ) ) 32 33 End Sub 34 35End Module 36

以下に、私の環境(OSはWindows 8.1 64 bit、Visual Studio 2013でx86用コンソールアプリを作成、.NET Frameworkのバージョンは4.5)で実行した時の結果を示します。

Manage heap : 29580 B
Integer型配列(要素数 10万)を30回生成します。
GC Count : 0, Manage heap : 437804 B
GC Count : 0, Manage heap : 837836 B
GC Count : 0, Manage heap : 1237868 B
GC Count : 0, Manage heap : 1637900 B
GC Count : 0, Manage heap : 2037932 B
GC Count : 0, Manage heap : 2437964 B
GC Count : 0, Manage heap : 2837996 B
GC Count : 0, Manage heap : 3238028 B
GC Count : 1, Manage heap : 839848 B
GC Count : 1, Manage heap : 1239864 B
GC Count : 1, Manage heap : 1639880 B
GC Count : 1, Manage heap : 2039896 B
GC Count : 1, Manage heap : 2439912 B
GC Count : 1, Manage heap : 2839928 B
GC Count : 1, Manage heap : 3239944 B
GC Count : 1, Manage heap : 3639976 B
GC Count : 2, Manage heap : 839848 B
GC Count : 2, Manage heap : 1239864 B
GC Count : 2, Manage heap : 1639880 B
GC Count : 2, Manage heap : 2039896 B
GC Count : 2, Manage heap : 2439912 B
GC Count : 2, Manage heap : 2839928 B
GC Count : 2, Manage heap : 3239944 B
GC Count : 2, Manage heap : 3639960 B
GC Count : 3, Manage heap : 839848 B
GC Count : 3, Manage heap : 1239864 B
GC Count : 3, Manage heap : 1639880 B
GC Count : 3, Manage heap : 2039896 B
GC Count : 3, Manage heap : 2439912 B
GC Count : 3, Manage heap : 2839928 B
Integer型配列の参照先をNothingにしました。
Manage heap : 2839928 B
ガベージコレクションを実行しました。
Manage heap : 39800 B

参考になれば幸いです。


それと、ガベージコレクションについての参考になるページを2つ載せておきます。

・@IT:.NET TIPS ガベージ・コレクタを明示的に動作させるには? - C# VB.NET
URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/021gc/gc.html

・.NETにおけるマネージヒープとガベージコレクション - Qiita
URL:http://qiita.com/mima_ita/items/8303f2a476e8630f0728

投稿2015/01/09 13:06

nia_tn1012

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ranran

2015/01/31 07:54

返事が遅くなってしまい申し訳ありません。 プログラム&URLまで載せていただきありがとうございます。 参考にし、よりいっそう知識を深めていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問