跟踪列表占用多少内存的简单方法?

时间:2011-08-16 07:47:41

标签: c# list .net-4.0 memory-management

public class Players
{
    public int GUID { get; set; }
    public string Name { get; set; }
    public string Country { get; set; }
    public Clans Clan { get; set; }

    public PlayerType Type { get; set; }
    public Groups Access { get; set; }
    public int Level { get; set; }
    public int RoomID { get; set; }

    public IPAddress IP { get; set; }
    public bool IsPlaying { get; set; }
    public bool IsProtected { get; set; }
    public bool IsBanned { get; set; }
    public bool IsInvisible { get; set; }

    public bool IsOnline()
    {
        return (IPAddress.Parse("0.0.0.0").Equals(this.ExtIP)) ? false : true;
    }

    public string GetIP()
    {
        return this.ExtIP.ToString();
    }
}

我有一个使用上述类的列表,我想知道如何跟踪列表为每个新用户添加的内存量,或者对已经在其上的任何用户进行的每次更改或者如何计算它(如果可能以简单的方式解释,从来都不是一个好的数学嘿嘿)?

如果有一个简单的代码可以告诉我,一旦列表更新或新条目进/出,我也会很感激。

这个应用程序在单声道的Linux下运行,并使用MySQL作为数据库,我在数据库上依赖很多,因为我在VPS上运行它消耗了大量的CPU /内存。

为了优化它,我正在考虑在启动时加载一些数据并每隔X分钟管理一次更新,并且只更新即时重要数据,而不是查询数据库以获取我需要使用的大部分信息。

首先,我想了解一下如何监控内存使用情况以及我已经或可以使用的各种列表。

1 个答案:

答案 0 :(得分:1)

您可以使用GC.GetTotalMemory() Method记录快照时间点内存使用情况:

// Measure starting point memory use
GCMemStart = System.GC.GetTotalMemory(true);

// Perform allocations

GCMemEnd = System.GC.GetTotalMemory(true);
  

[如果forceFullCollection参数为true,则此方法等待a   系统收集垃圾时返回前的短暂间隔   最终确定对象]