2009-04-11 3 views
1

난 그냥 일반적인 .NET의 문의 사항 :ItemControl에 요소를 추가하는 것이 얼마나 비쌉니까?

클래스

나는 큰 (메모리 크기)이 있다고 가정
public class BigClass 
{ 
... 
} 

나는 그런이

같은 목록 상자 또는에서 Datagrid 같은 ItemControl에 항목을 추가하는 경우
BigClass b = new BigClass(); 
ListBox1.Items.Add(b); 

이런 식으로 리소스를 어떻게 사용합니까? 추가 된 항목이 참조되었거나 인스턴스로 만들어진 사본입니까 (많은 메모리 사용이 원인입니까)?

감사합니다.

답변

3

참조 용으로 추가됩니다. .NET 개체에 대한 암시 적 복사 의미 체계는 없습니다.

+0

자네 말이 맞아,하지만 그 – user88637

0

그냥, 신속하고 더러운 테스트를 만들었습니다. ListBox1.Items는 복사본을 만들지 않고 참조를 유지합니다. 여기

는 전체 코드입니다 :

public class A 
{ 

    int a; 

    public int A1 
    { 
     get { return a; } 
     set { a = value; } 
    } 

} 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     A a = new A(); 
     a.A1 = 4; 

     A b = new A(); 
     b.A1 = 4; 

     listBox1.Items.Add(a); 
     listBox1.Items.Add(b); 

     A c = listBox1.Items[0] as A; 
     A d = listBox1.Items[1] as A; 

     if(a.Equals(c)) 
     { 
      int k = 8; //program enter here so a is instance of c 
     } 

     if (a.Equals(d)) 
     { 
      int k = 8; //program doesn't enter here meaning a is not instance of d 
     } 


    } 
} 
+0

덕분에 ListBox.Items의 "추가"방법에는 복제가 없다는 것을 의미하지 않는다, 그것은 할 매우 도움이 확실한. – Adam

관련 문제