我们目前正在为预期的大量负载准备我们的 Azure 角色(标准 Web 角色),并且我们需要知道当前设置消耗了多少内存。为了实现这一目标,我们使用负载测试,同时使用 GC.GetTotalMemory
测量消耗的内存。
页面http://technet.microsoft.com/en-us/cloud/gg663909.aspx列出每个实例大小的计算实例保证内存
(例如,超小型实例为 0.768 GB
,中型实例为 3.5 GB
)。
GC.GetTotalMemory
的值与这些列表中的值相当吗?换句话说,如果 GC.GetTotalMemory
保持显着增长低于列出的限制,我们能否确定不会因内存交换而导致性能突然下降?
如果我们达到限制,我们的假设是否正确,即将会发生一些内存交换(将内存内容写入虚拟硬盘),或者是否会产生更严重的影响,例如重复的应用程序池回收?
(出现最后一个问题是因为如果您达到内存限制,大多数共享托管商都会回收您的应用程序池,但坦率地说,我们不希望 Windows Azure 出现这样的情况)
最佳答案
此方法只会为您提供进程当前分配的字节。 0.768 GB 包括操作系统可用的内存,也可以有虚拟内存。
要获取可以使用的总系统内存:
添加对 System.Management 的引用。
private static void DisplayTotalRam()
{
string Query = "SELECT MaxCapacity FROM Win32_PhysicalMemoryArray";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(Query);
foreach (ManagementObject WniPART in searcher.Get())
{
UInt32 SizeinKB = Convert.ToUInt32(WniPART.Properties["MaxCapacity"].Value);
UInt32 SizeinMB = SizeinKB / 1024;
UInt32 SizeinGB = SizeinMB / 1024;
Console.WriteLine("Size in KB: {0}, Size in MB: {1}, Size in GB: {2}", SizeinKB, SizeinMB, SizeinGB);
}
}
关于memory - Azure 保证内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12914881/