如何在.NET中确定CPU缓存大小?

GKa*_*kyi 5 .net c# windows

我想知道是否有办法确定托管代码中的CPU缓存大小?

我正在编写一个用于C#中矩阵乘法的Strassen算法,并且想知道我可以在缓存中加入多少矩阵元素来提高计算速度.

Tim*_*oyd 7

您可以使用WMI检索缓存信息.

您首先需要添加System.Management.dll对项目的引用,然后您可以使用以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;

namespace Scratch
{
    public enum CacheLevel : ushort 
    {
        Level1 = 3,
        Level2 = 4,
        Level3 = 5,
    }

    public static class CPUInfo
    {
        public static List<uint> GetCacheSizes(CacheLevel level)
        {
            ManagementClass mc = new ManagementClass("Win32_CacheMemory");
            ManagementObjectCollection moc = mc.GetInstances();
            List<uint> cacheSizes = new List<uint>(moc.Count);

            cacheSizes.AddRange(moc
              .Cast<ManagementObject>()
              .Where(p => (ushort)(p.Properties["Level"].Value) == (ushort)level)
              .Select(p => (uint)(p.Properties["MaxCacheSize"].Value)));

            return cacheSizes;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有关Win32_CacheMemoryWMI类的完整详细信息,请访问:

http://msdn.microsoft.com/en-us/library/aa394080(v=vs.85).aspx