C#でメモリ使用量を取得しましょう|メモリ使用量についても紹介

エンジニア
マネージャー
C#のメモリ使用量について
今回は、C#のメモリ使用量について説明します。
PC全体のメモリ量や利用可能メモリ量の取得方法について紹介します。
また、プロセスのメモリ使用量取得方法についても紹介します。
C#のメモリ使用量に興味のある方はぜひご覧ください。
PCのメモリ使用量取得(WMI)
C#では、WMIでPCのメモリ使用量を取得できます。
Timerクラスを使用して、1秒ごとにメモリ使用量を取得するプログラムを作成します。
実際のソースコードを見てみましょう。
※事前に、System.Managementを参照に追加してください。
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 |
using System; using System.Drawing; using System.Windows.Forms; using System.Management; namespace WindowsFormsApp1 { public partial class Form1 : Form { Timer timer; Label label; ManagementClass mc; ManagementObjectCollection moc; public Form1() { label = new Label(); label.Location = new Point(10, 10); label.AutoSize = true; timer = new Timer(); timer.Interval = 1000; timer.Enabled = true; mc = new ManagementClass("Win32_OperatingSystem"); timer.Tick += Timer_Tick; this.FormClosing += Form1_FormClosing; this.Controls.Add(label); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { moc.Dispose(); } private void Timer_Tick(object sender, EventArgs e) { moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { // メモリ使用量の取得 label.Text = string.Format("合計物理メモリ:{0}KB\r\n利用可能物理メモリ:{1}KB\r\n合計仮想メモリ:{2}KB\r\n利用可能仮想メモリ:{3}KB", mo["TotalVisibleMemorySize"], mo["FreePhysicalMemory"], mo["TotalVirtualMemorySize"], mo["FreeVirtualMemory"]); mo.Dispose(); } } } } |
実行すると、1秒単位でLabelにメモリ使用量が表示されることが分かります。
このように、C#ではWMIでPCのメモリ使用量を取得できます。
PCのメモリ使用量取得(ComputerInfo)
別の方法として、C#では、ComputerInfoでPCのメモリ使用量を取得できます。
実際のソースコードを見てみましょう。
※事前に、Microsoft.VisualBasicを参照に追加してください。
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 |
using System; using System.Drawing; using System.Windows.Forms; using Microsoft.VisualBasic.Devices; namespace WindowsFormsApp1 { public partial class Form1 : Form { Timer timer; Label label; public Form1() { label = new Label(); label.Location = new Point(10, 10); label.AutoSize = true; timer = new Timer(); timer.Interval = 1000; timer.Enabled = true; timer.Tick += Timer_Tick; this.Controls.Add(label); } private void Timer_Tick(object sender, EventArgs e) { ComputerInfo info = new ComputerInfo(); // メモリ使用量の取得 label.Text = string.Format("合計物理メモリ:{0}KB\r\n利用可能物理メモリ:{1}KB\r\n合計仮想メモリ:{2}KB\r\n利用可能仮想メモリ:{3}KB", (info.TotalPhysicalMemory / 1024), (info.AvailablePhysicalMemory / 1024), (info.TotalVirtualMemory / 1024), (info.AvailableVirtualMemory / 1024)); } } } |
実行すると、1秒単位でLabelにメモリ使用量が表示されることが分かります。
このように、C#ではComputerInfoでPCのメモリ使用量を取得できます。
プロセスのメモリ使用量取得(Environment)
C#では、Environment.WorkingSetプロパティで自プロセスのメモリ使用量を取得できます。
実際のソースコードを見てみましょう。
※Timer_Tickメソッドのみ記載します。
1 2 3 4 5 6 7 8 |
private void Timer_Tick(object sender, EventArgs e) { // メモリ使用量の取得 long currentSet = Environment.WorkingSet; label.Text = string.Format("Environment.WorkingSet={0}byte", currentSet.ToString("N0")); } |
実行すると、自プロセスのメモリ使用量がLabelに表示されます。
Formをリサイズしたりすると、メモリ使用量が変動します。
このように、C#ではEnvironment.WorkingSetプロパティで自プロセスのメモリ使用量を取得できます。
プロセスのメモリ使用量取得(GC)
別の方法として、C#では、GCクラスでPCのメモリ使用量を取得できます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 |
private void Timer_Tick(object sender, EventArgs e) { // メモリ使用量の取得 long currentSet = GC.GetTotalMemory(true); label.Text = string.Format("GC.GetTotalMemory={0}byte", currentSet.ToString("N0")); } |
このように、C#ではGCクラスでPCのメモリ使用量を取得できます。
プロセスのメモリ使用量取得(Process)
別の方法として、C#では、ProcessクラスでPCのメモリ使用量を取得できます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 |
private void Timer_Tick(object sender, EventArgs e) { System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess(); p.Refresh(); // メモリ使用量の取得 label.Text = string.Format("物理メモリ使用量: {0}\r\n仮想メモリ使用量: {0}", p.WorkingSet64, p.VirtualMemorySize64); } |
このように、C#ではProcessクラスでPCのメモリ使用量を取得できます。
エンジニア
マネージャー
まとめ
いかがでしたでしょうか。
C#でのPC全体のメモリ量や利用可能メモリ量の取得方法について紹介しました。
また、プロセスのメモリ使用量取得方法についても紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅)システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)