c# - 如何确定 .NET 中的 CPU 缓存大小?

标签 c# .net windows

我想知道是否有一种方法可以确定托管代码中的 CPU 缓存大小?

我正在用 C# 编写用于矩阵乘法的 Strassen 算法,想知道我可以将多少矩阵元素放入缓存以提高计算速度。

最佳答案

您可以使用 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;
        }
    }
}

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

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

关于c# - 如何确定 .NET 中的 CPU 缓存大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6995787/

相关文章:

c# - 通过 Visual Studio 2008 中的 Post Build Event 为多个命令添加 XCopy 命令

javascript - 隐藏/显示 div 内的 ASP 复选框列表

MySQL 子查询死锁(某种)

c++ - 检查winapi函数是否可用

c# - 建立连接后需要调用DisposeLocalCopyOfClientHandle()

c# - 如何在 ASP.NET 中的运行状况检查返回 'degraded'/'unhealthy' 时发送电子邮件警报

c# - 无法注册 Windows.Devices.Bluetooth

c# - DropDownList.DataTextField 不能绑定(bind)到数据集?

c# - 二进制数相减时判断 "Borrow"

c# - C# 中的只读列表