我创建了一个课程。我在类中使用了List.Add(this),因此我可以访问稍后创建的控件。它似乎非常有用,我不知道如何创建控件(在没有预定义限制的同一父控件中多个控件)并稍后访问它们。
我在互联网上寻找Add(this),但无法找到更多信息。
这是一个大资源还是无效?为什么我无法找到更多相关信息?这似乎非常有用。
public class GlobalData
{
private static List<Member> _Members;
public partial class ChildrenPanel
{
private static List<ChildrenPanel> _ListCP = new List<ChildrenPanel>();
//X and Y position Panel | Container is the control recieving the Control
public void CreatePanel(int X, int Y, Panel Container)
{
//
// pnlStudent
//
_pnlStudent.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
_pnlStudent.Controls.Add(_lblCLastName);
_pnlStudent.Controls.Add(_lblCFirstName);
_pnlStudent.Controls.Add(_lblGrade);
_pnlStudent.Controls.Add(_lblSelected);
_pnlStudent.Controls.Add(_lblSeason);
_pnlStudent.Controls.Add(_lblAvailable);
_pnlStudent.Controls.Add(_lblGender);
_pnlStudent.Controls.Add(_ddlGrade);
_pnlStudent.Controls.Add(_ddlSelectedSports);
_pnlStudent.Controls.Add(_ddlAvailableSports);
_pnlStudent.Controls.Add(_ddlSeason);
_pnlStudent.Controls.Add(_rdbFemale);
_pnlStudent.Controls.Add(_rdbMale);
_pnlStudent.Controls.Add(_btnRemoveChild);
_pnlStudent.Controls.Add(_btnRemoveSport);
_pnlStudent.Controls.Add(_btnAddSport);
_pnlStudent.Controls.Add(_txtCLastName);
_pnlStudent.Controls.Add(_txtCFirstName);
_pnlStudent.Location = new System.Drawing.Point(X, Y);
_pnlStudent.Name = "pnlStudent";
_pnlStudent.Size = new System.Drawing.Size(494, 105);
//Still playing with the tab index
_pnlStudent.TabIndex = 10;
// Adds controls to selected forms panel
Container.Controls.Add(_pnlStudent);
// Creates a list of created panels inside the class
ListCP.Add(this);
}
答案 0 :(得分:1)
请确保在不再需要时再次删除实例,否则持有对它的引用的List将永久保留在内存中(毕竟,欢迎使用.NET中的内存泄漏)。
答案 1 :(得分:1)
如果您的列表是静态的或全局可用,那么您正在做一些非常糟糕的事情。
ASP.Net的结构使得每个用户对页面的每个请求(包括回发)都会产生页面类的新实例。这是很多页面实例。如果在某处保存对所有这些实例的引用,则实例永远不会被垃圾回收。您已经创建了类似于内存泄漏的东西,并且在部署到生产后很快就会发现自己耗尽了资源。
这里真正危险的是,如果你只进行功能测试并且没有负载测试,那么问题很可能在测试期间根本不会显示出来,因为在吹出之前它会在几百(甚至几千)个请求中正常工作在你身上。
如果您担心动态控件,有几种更好的方法可以解决这个问题:
.Visible
属性切换)。答案 2 :(得分:1)
一旦我看到一些代码,我可能会修改这个答案,但我最初的回答是它不是资源匮乏。至于它是否有效,将需要一些示例代码。
将对象添加到集合不会占用大量资源,因为您只是将对象的引用添加到集合中。您仍然只有一个对象,但有两个(或更多)指向该对象的变量,因此您使用的唯一额外资源是引用使用的最小内存。