[VC2005] Win32_CacheMemoryを利用してキャッシュメモリサイズを取得する方法
◆概要
マイクロソフト社のサポート情報にあるように、Win32_Processor WMI クラスの L2CacheSize プロパティは、特定の種類のプロセッサで正しく取得されないことがあります。たとえば、私のPCはPentium4 2.53GHzですが、2次キャッシュが0と表示されてしまいます。
図1は、Win32_Processor WMI クラスを利用してCPU情報を表示させたものです。赤枠で示しているところがL2キャッシュです。本来、ここは512(KB)でなくてはなりませんが、0と表示されてしまっています。
図1
これを回避して、正しいキャッシュサイズを取得するには、Win32_CacheMemoryクラスのMaxCacheSizeプロパティを利用します。
Win32_CacheMemoryクラスは、コンピュータのキャッシュメモリ(内部・外部)を表すWMIクラスです。
◆Sample Code
リスト1は、1次キャッシュと2次キャッシュをコンソールに表示します。最初のキャッシュサイズが1次キャッシュ(内部キャッシュ)、2つめが2次キャッシュ(外部キャッシュ)です。
まず、メニュー[プロジェクト]-[参照の追加]で、System.Managementをダブルクリックして追加してください。
次に下記のコードを実装します。
リスト1
using System; using System.Management; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { ManagementObjectSearcher searcher = new ManagementObjectSearcher( "Select MaxCacheSize from Win32_CacheMemory"); foreach (ManagementObject L2CacheSize in searcher.Get()) { Console.WriteLine("キャッシュサイズ: {0}", L2CacheSize.GetPropertyValue("MaxCacheSize")); } Console.ReadLine(); } } }
◆実行結果
図2
◆LINQで取得する方法
C# 2008から利用できるLINQを使用した例です。
using System; using System.Management; using System.Linq; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var query = from mo in (new ManagementClass("Win32_CacheMemory")). GetInstances().OfType<ManagementObject>() from p in mo.Properties.OfType<PropertyData>() where p.Name == "InstalledSize" select p.Value; Console.WriteLine(query.ElementAt(0)); // 1次キャッシュ Console.WriteLine(query.ElementAt(1)); // 2次キャッシュ Console.ReadKey(); } } }
◆実行結果
図3
▼ページトップへ