图 1 中的图像显示一种运行中的压力工具 EatMem。命名压力器时通常使用"Eat"前缀,后跟要使用的资源类型,因此减少内存、磁盘空间和降低 CPU 可用性的压力器可分别命名为 EatMem、EatDisk 和 EatCpu。EatMem 压力器是一个命令行程序,它接受一个指定运行时长的参数(以分为单位)。EatMem 大约每三秒钟尝试分配随机数量的可用内存。正如您在图 1 中看到的,内存请求可能失败。在这种情况下,EatMem 会一直尝试分配内存,直到成功为止。当然,该压力器工具自身并不执行任何实际测试;它只是准备一个进行测试的计算机状态。通过在测试实际程序的同时运行该程序,您可为应用程序模拟在常规测试环境中很难进行测试的条件。
图 1 运行中的 EatMem 压力器 整体程序结构 EatMem 压力器工具(用 C# 编写)的整体结构如图 2 所示。首先,我将一个 using 语句添加到 InteropServices 命名空间,这样就可以调用本机 Win32® 函数。特别地,我调用 GlobalAlloc 和 GlobalFree 函数来分配和释放内存,并调用 GlobalMemoryStatus 函数确定分配多少内存。我还使用了一些 Win32 API 函数来操作控制台文本的颜色。 Figure 2 EatMem Program Structureusing System;
using System.Runtime.InteropServices; namespace EatMem
{
class Class1
{
[DllImport("kernel32.dll")]
extern static IntPtr GlobalAlloc(uint uFlags, uint dwBytes); [DllImport("kernel32.dll")]
extern static IntPtr GlobalFree(IntPtr hMem);
[DllImport("kernel32.dll")]
extern static void GlobalMemoryStatus(ref MEMORYSTATUS lpBuffer);
public struct MEMORYSTATUS
{
public uint dwLength;
public uint dwMemoryLoad;
public uint dwTotalPhys;
public uint dwAvailPhys;
public uint dwTotalPageFile;
public uint dwAvailPageFile;
public uint dwTotalVirtual;
public uint dwAvailVirtual;
} static MEMORYSTATUS memStatusBuffer = new MEMORYSTATUS();
[STAThread]
static void Main(string[] args)
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/