我是否需要在C#中释放数组使用的内存?

时间:2013-08-01 11:20:17

标签: c# arrays memory-management

假设我有一个类InvoiceItem类型的对象数组,定义如下:

 private class InvoiceItem
    {
        public DateTime InvoiceDate { get; set; }
        public int InvoiceID { get; set; }
        public byte ItemType { get; set; }
        public short Quantity { get; set; }
        public string ProductName { get; set; }
        public decimal Price { get; set; }
        public decimal Amount{ get; set; }

        public InvoiceItem(DateTime InvoiceDate,int InvoiceID, short Quantity, string ProductName, decimal Price,decimal Amount, byte ItemType)
        {
            this.InvoiceDate = InvoiceDate;
            this.InvoiceID = InvoiceID;
            this.Quantity = Quantity;
            this.ProductName = ProductName;
            this.Price = Price;
            this.Amount = Amount;
            this.ItemType = ItemType;
        }
    }

我尝试将我的项目缓存在名为invoiceItemsCache

的数组中
private InvoiceItem[] invoiceItemsCache;

每次我想刷新缓存时,我都会重新初始化我的数组:

invoiceItemsCache = new InvoiceItem[count];

我是否需要 Something 发布以前缓存使用的内存,还是自动完成?如果有人提供有关数组在C#中存储和发布的方式的其他信息,我将不胜感激,以消除我遇到的任何疑问和困惑。

2 个答案:

答案 0 :(得分:3)

C#中的GC正在浏览对象并检查引用。如果一个对象没有引用它,那么GC就会释放它。

在你的情况下,如果你这样做

invoiceItemsCache = new InvoiceItem[count];

然后旧的值没有引用它们(除非你对它们有不同的引用,你没有提及,然后你应该首先处理它们)并将被释放

答案 1 :(得分:2)

它由底层垃圾收集器自动完成。

与C#中的任何其他对象一样,存储和释放数组。