在我工作的公司中,我们有一堆Web应用程序,我们在网站的页脚中显示一些对开发人员有用的信息(例如汇编版本)。
性能明智(我不关心它的UX方面),通过调用GC.GetTotalMemory(false)
显示内存使用情况是不是一个坏主意?我是否应该担心每次请求都执行此调用?
答案 0 :(得分:1)
当我看到你的问题时我很好奇,因为它不是常规的东西,并决定尝试一下。
创建了一个简单的网站,在default.aspx中填充了近1 GB的小对象(1000万字节数组,每个64字节)到堆中,然后调用GC.GetTotalMemory 100次,每次之前添加一个新对象所以如果有任何缓存值,它就会过时。
GC.GetTotalMemory(false)的平均执行时间为0,000687毫秒!
我有一个Win 7 64位2 CPU(总共8核)HP,内存为8 GB。
我认为,您的开发人员会在那里有一个很好的指标:)
Default.aspx.cs:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
private List<object> objects = new List<object>();
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10000000; i++)
{
objects.Add(new byte[64]);
}
double averageDuration = 0;
for (int x = 0; x < 100; x++)
{
objects.Add(new byte[64]);
Stopwatch sw = Stopwatch.StartNew();
Response.Write("Total memory: " + GC.GetTotalMemory(false) + " / ");
sw.Stop();
averageDuration += sw.Elapsed.TotalMilliseconds;
Response.Write("Duration: " + sw.Elapsed.TotalMilliseconds + "<br/>");
}
Response.Write("Average Duration: " + (averageDuration / 100));
}
}