【问题标题】:IoT Raspberry Pi 2 - Forcing load onto itIoT Raspberry Pi 2 - 强制加载
【发布时间】:2016-10-26 02:59:05
【问题描述】:

我的项目包含测量不同“负载”下的温度,这会影响树莓派的能力,以查看使树莓“更努力”工作是否会影响温度传感器输入。我在我的树莓派 2 型号 B 上使用 Windows 10,但无法找到足够的相关资源,因此在这里询问。

  • 是否有可能以某种方式从 Visual Studio 以编程方式将负载加载到树莓派上,作为树莓派的通用应用程序,例如强制它增加可用 RAM 的使用率或限制它?如果是这样,最好的解决方案是什么?

  • 有没有办法通过通用应用程序项目中已经实现的功能以编程方式检查它总共使用了多少 RAM?

  • 是否有任何其他方法可以在覆盆子上“放置负载”并能够测量您强制它工作的负载量?

非常感谢任何类型的帮助,在此先感谢您为回答这些问题所做的努力!

【问题讨论】:

  • 用 C++ 很容易做到。
  • 那到底是怎么做的呢?

标签: c# ram raspberry-pi2 iot capacity


【解决方案1】:

有什么方法可以通过编程方式检查它使用了多少 RAM 总的来说,通过通用应用程序中已经实现的功能 项目?

没有获取使用中的总 RAM 的直接 API,但您可以获得可用的 RAM,在 C# 中,这样做:

    [StructLayout(LayoutKind.Sequential)]
    private class MEMORYSTATUSEX
    {
        public uint dwLength;
        public uint dwMemoryLoad;
        public ulong ullTotalPhys;
        public ulong ullAvailPhys;
        public ulong ullTotalPageFile;
        public ulong ullAvailPageFile;
        public ulong ullTotalVirtual;
        public ulong ullAvailVirtual;
        public ulong ullAvailExtendedVirtual;
        public MEMORYSTATUSEX()
        {
            this.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
        }
    }

    [return: MarshalAs(UnmanagedType.Bool)]
    [DllImport("kernel32.dll", SetLastError = true)]
    static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer); 

    // Alternate Version Using "ref," And Works With Alternate Code Below.
    // Also See Alternate Version Of [MEMORYSTATUSEX] Defined As A Structure. 
    [return: MarshalAs(UnmanagedType.Bool)]
    [DllImport("kernel32.dll", EntryPoint = "GlobalMemoryStatusEx", SetLastError = true)]
    static extern bool _GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);

    void GetProcessUsage()
    {
        MEMORYSTATUSEX data = new MEMORYSTATUSEX();

        GlobalMemoryStatusEx(data);

        System.Diagnostics.Debug.WriteLine(data.ullTotalPageFile + "\t\t" + data.ullAvailPageFile);
    }

有没有其他方法可以在树莓上“放置负载”并被 能够测量您强制它工作的负载量吗?

你可以试试这个:

        List<byte[]> list = new List<byte[]>();

        while (true)
        {
            var buf = new byte[1024 * 1024 * 50];
            list.Add(buf);
            System.Diagnostics.Debug.WriteLine("Allocating memory");
            await Task.Delay(1000);
        }

可用于应用程序的内存是 390MB 的 Raspberry Pi 3 和 1GB RAM。对于 512 MB 的型号,似乎是 185MB。您可以使用Windows.System.MemoryManager.AppMemoryUsageLimit 来确认您的设备。

【讨论】: