2014-10-10 1 views
0

메모리 사용을 줄이기 위해 데스크톱 Winforms 응용 프로그램에서 SQL Server CE 데이터베이스의 개체를 전달하는 가장 좋은 방법을 찾고 싶습니다.양식간에 SDF 개체를 전달하는 가장 좋은 방법

.sdf 로컬 데이터베이스가 생성 된 dbml로 프로젝트에 연결되어 있습니다. 제품 개체를 선택하려면 버튼을 한 주 부모 폼 -

  1. MainForm :

    또한 나는 4 개 형태를 가지고있다.

  2. ProductSelectForm - 데이터베이스에서 제품을 선택하는 양식.
  3. MainProductForm - MDI 하위 폼은 선택한 제품 및이 정보를 편집하는 데 필요한 정보와 차트를 표시합니다.
  4. ProductForm - 신제품을 추가하거나 선택한 제품에 대한 정보를 편집 할 수있는 양식.

두 가지 옵션이 있습니다. 항목의 ID를 전달하거나 Item 개체를 전달하는 것입니다.

아래 예를 기반으로하면 폼간에 정보를 전달하는 가장 좋은 방법은 무엇입니까? (ID 또는 객체)?

다른 권장 사항이 있습니까?

홈페이지 형태 :

public MainForm() 
{ 
    InitializeComponent(); 
} 

private void ProductSelectBarButton_ItemClick(object sender, ItemClickEventArgs e) 
{ 
     ProductSelectForm PSF = new ProductSelectForm(); 

     if (PSF.ShowDialog() == DialogResult.OK) 
     { 
       MainProductForm MPF = new MainProductForm(PSF.ProductSelected); 
       MPF.MdiParent = this; 
       MPF.Show(); 
     } 

     PSF.Dispose(); 
} 

ProductSelectForm :

public Product ProductSelected = null;  

public ProductSelectForm() { InitializeComponent(); } 

private void OKButton_Click(object sender, EventArgs e) 
{ 
     var ActiveItem = ProductGrid.GetFocusedRowCellValue("Product_ID"); 
     ProductSelected = DB.Product.Where(x => x.Product_ID == (int)ActiveItem).Single(); 
     this.Close();     
} 

MainProductForm :

public Product cProduct;   

public MainProductForm(Product product) { 
     InitializeComponent(); 
     cProduct = product; 
     this.Text = cProduct.Product_Name; 
} 

private void ProductEditBarButton_ItemClick(object sender, ItemClickEventArgs e) 
{ 
     ProductForm PF = new ProductForm(EditMode.Edit, cProduct.Product_ID); 
     PF.ShowDialog(); 
     PF.Dispose(); 
     Form_Refresh(); 
} 

ProductForm :

private Product T = null; 
private EditMode Mode; 
public Product ProductAdded = null; 

public ProductForm(EditMode mode) : this(mode, 0) { } 

public ProductForm(EditMode mode, int ID) 
{ 
     InitializeComponent(); 
     Mode = mode;   
     switch (Mode) 
     { 
      case (EditMode.Add): 
       T = new Product(); 
       break; 

      case (EditMode.Edit): 
       T = CurrentState.cDB.Product.Where(x => x.Product_ID == ID).Single(); 
       NameEdit.Text = T.Product_Name; 
       break; 
     }    
} 

private void OKButton_Click(object sender, EventArgs e) 
{ 
      T.Product_Name = NameEdit.Text; 
      if (Mode == EditMode.Add) 
      { 
       DB.Product.InsertOnSubmit(T); 
      } 
      DB.SubmitChanges(); 
      if (Mode == EditMode.Add) 
       ProductAdded = DB.Product.Where(x => x.Product_ID == T.Product_ID).Single(); 
      this.Close(); 
     } 
} 

답변

0

ID를 전달하면 각 양식에서 데이터베이스의 데이터를 다시 선택해야합니다. PC 용 및 개발자 용 모두 많은 작업입니다. 귀하의 제품에는 메모리 사용 공간이 거의 없을 것입니다. 그러므로 메모리가 문제가되는 시스템을 프로그래밍하지 않는다면 (그리고 오늘은 반 전화 또는 깨진 계산기 또는 무언가를 의미 할 것입니다), 적은 양의 배터리 사용을 위해 조금 더 많은 메모리를 사용하는 시스템을 만들어야합니다 개발자가 모든 형태로 휠을 재발견 할 필요가 없으므로 오류가 줄어 듭니다.

+0

ProductSelectForm (public Product ProductSelected)에서 객체를 선택한 경우 MainForm (새 MainProductForm (PSF.ProductSelected))에 전달하고 ProductForm (public Product cProduct;)에서 엽니 다. ? – John4

+0

또는 ProductSelected는 cProduct와 동일하며 하나의 메모리 슬롯을 사용합니까? – John4

+0

많은 요인에 따라 다릅니다. 참조 유형 (클래스) 인 경우 참조가 모든 양식으로 전달되는 동안 메모리는 한 번만 차지합니다. 그러나 3 배의 메모리를 사용해도. 얼마나 많은 기억이 있니? – nvoigt