圖 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)
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/