我们目前正在为预期的大规模负载准备Azure角色(标准Web角色),我们需要知道当前设置消耗了多少内存。为了实现这一点,我们在使用GC.GetTotalMemory测量所消耗的内存时使用负载测试。
页面http://technet.microsoft.com/en-us/cloud/gg663909.aspx列出了每个实例大小的Compute Instance Guaranteed Memory (例如,超小型实例的0.768 GB和中型实例的3.5 GB )。
GC.GetTotalMemory 的值与这些列表中的值相当吗?,换句话说,如果GC.GetTotalMemory显着地低于列出的极限,我们能确保不会因为内存交换而突然失去性能吗?
如果我们达到了极限,我们的假设是否正确:会有一些内存交换(将内存内容写入虚拟硬盘)、,还是会有更严重的影响,比如重复App回收?
(最后一个问题是因为大多数共享主机都会在达到内存限制的情况下回收应用程序池,但坦率地说,我们并不期望Windows会出现类似的情况。)
发布于 2012-10-16 12:47:53
此方法将只按进程给出当前分配的字节。0.768 GB包括可供操作系统使用的内存,也可以有虚拟内存。
system.gc.gettotalmemory
要获得整个系统内存,可以使用:
添加对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);
}
}代码的源代码
发布于 2012-10-16 16:10:30
为了回答您的最后一个问题,Windows将避开,分页将像在任何Windows服务器上一样发生。
IIS是否回收应用程序池可能取决于您的IIS设置,但这些设置在您的控制之下。(例如,如果要更改默认值,可以在启动任务中运行appcmd。)
https://stackoverflow.com/questions/12914881
复制相似问题