Memory Azure保证内存

Memory Azure保证内存,memory,azure,Memory,Azure,我们目前正在准备Azure角色(标准Web角色)以应对预期的大规模负载,我们需要知道当前设置消耗了多少内存。为了实现这一点,我们使用负载测试,同时使用GC.GetTotalMemory测量消耗的内存 该页面列出了每个实例大小的计算实例保证内存(例如,对于超小实例为0.768 GB,对于中等实例为3.5 GB) GC.getTotalMemy的值是否与这些列表中的值相当?换句话说,如果GC.getTotalMemy显著低于列出的限制,我们是否可以确保不会因内存交换而突然失去性能 如果我们达到极限,

我们目前正在准备Azure角色(标准Web角色)以应对预期的大规模负载,我们需要知道当前设置消耗了多少内存。为了实现这一点,我们使用负载测试,同时使用
GC.GetTotalMemory
测量消耗的内存

该页面列出了每个实例大小的
计算实例保证内存
(例如,对于超小实例为
0.768 GB
,对于中等实例为
3.5 GB

GC.getTotalMemy的值是否与这些列表中的值相当?换句话说,如果
GC.getTotalMemy
显著低于列出的限制,我们是否可以确保不会因内存交换而突然失去性能

如果我们达到极限,我们的假设是否正确,即会出现一些内存交换(将内存内容写入虚拟硬盘),还是会出现更严重的影响,如重复的应用程序池回收?


(最后一个问题出现了,因为如果您达到某个内存限制,大多数共享主机都会回收您的应用程序池,但坦率地说,我们并不期望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);
  }
}

要回答您的最后一个问题,Windows Azure将不会碍事,分页将像在任何Windows服务器上一样发生


IIS是否回收您的应用程序池可能取决于您的IIS设置,但这些设置由您控制。(例如,如果您想更改默认值,可以在启动任务中运行appcmd。)

我知道我们可以尝试一下,看看如果达到内存限制会发生什么,但很可能VM中的内存会比列表中指定的多。列表中的值是Microsoft提供的保证,而不是实际可用内存量。