메모리 사용을 줄이기 위해 데스크톱 Winforms 응용 프로그램에서 SQL Server CE 데이터베이스의 개체를 전달하는 가장 좋은 방법을 찾고 싶습니다.양식간에 SDF 개체를 전달하는 가장 좋은 방법
.sdf
로컬 데이터베이스가 생성 된 dbml로 프로젝트에 연결되어 있습니다. 제품 개체를 선택하려면 버튼을 한 주 부모 폼 -
MainForm
:또한 나는 4 개 형태를 가지고있다.
ProductSelectForm
- 데이터베이스에서 제품을 선택하는 양식.MainProductForm
- MDI 하위 폼은 선택한 제품 및이 정보를 편집하는 데 필요한 정보와 차트를 표시합니다.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();
}
}
ProductSelectForm (public Product ProductSelected)에서 객체를 선택한 경우 MainForm (새 MainProductForm (PSF.ProductSelected))에 전달하고 ProductForm (public Product cProduct;)에서 엽니 다. ? – John4
또는 ProductSelected는 cProduct와 동일하며 하나의 메모리 슬롯을 사용합니까? – John4
많은 요인에 따라 다릅니다. 참조 유형 (클래스) 인 경우 참조가 모든 양식으로 전달되는 동안 메모리는 한 번만 차지합니다. 그러나 3 배의 메모리를 사용해도. 얼마나 많은 기억이 있니? – nvoigt