2013-08-01 4 views
3

Предположим, что у меня есть массив объектов типа класса InvoiceItem определено ниже:Должен ли я освобождать память, используемую массивами в C#?

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]; 

мне нужно сделать что-то Do до релиз память, используемая предыдущим кешем, или это делается автоматически? Я буду признателен, если кто-нибудь даст дополнительную информацию о том, как массивы хранятся и выпускаются на C#, чтобы устранить любые сомнения и путаницу, с которыми я сталкиваюсь.

ответ

3

GC на C# проходит через объекты и проверяет ссылки. если объект не ссылается на него, то GC освободит его.

в вашем случае, если вы

invoiceItemsCache = new InvoiceItem[count]; 

тогда старые значения не имеет никаких ссылок на них (если у вас нет другой ссылки на них, что вы не упоминаете, а затем вы должны расположить их первый) и будет быть освобожденным

+0

Может быть, он должен «распоряжаться некоторыми ссылками», но не 'Dispose()' их. Трудный выбор слов. –

2

Это делается автоматически базовым сборщиком мусора.

Массивы хранятся и освобождаются, как и любой другой объект на C#.

Смежные вопросы