多实例化的成本

时间:2010-01-21 17:29:07

标签: c# instantiation

今天在项目中工作时,我遇到了以下代码:

pcShowByCategory.Controls.Add(new LiteralControl("<div id='lblDivP'>"));
pcShowByCategory.Controls.Add(new LiteralControl("<table width=100%><tr><td colspan='2' align ='left'>"));
pcShowByCategory.Controls.Add(lblTitle);
pcShowByCategory.Controls.Add(new LiteralControl("</br>"));
pcShowByCategory.Controls.Add(new LiteralControl("</br>"));
pcShowByCategory.Controls.Add(new LiteralControl("</td></tr><tr><td colspan='2'>"));
pcShowByCategory.Controls.Add(lbltitle1);
pcShowByCategory.Controls.Add(new LiteralControl("</br>"));
pcShowByCategory.Controls.Add(new LiteralControl("</td></tr><tr><td colspan='2'>"));

我最初的想法是:为什么世界上没有他们在一两行中做到这一点而不是创造这么多新的LiteralControls。 我的问题是 - 这是一个草率和浪费的内存,应该合并到LiteralControl的一个或两个实例,或者这不是一个大问题?

2 个答案:

答案 0 :(得分:1)

如果它们都是硬编码的字符串,那么有人应该被解雇。

至少10秒的重构......

pcShowByCategory.Controls.Add(new LiteralControl("<div id='lblDivP'><table width=100%><tr><td colspan='2' align ='left'>"));
pcShowByCategory.Controls.Add(lblTitle);
pcShowByCategory.Controls.Add(new LiteralControl("</br></br></td></tr><tr><td colspan='2'>"));
pcShowByCategory.Controls.Add(lbltitle1);
pcShowByCategory.Controls.Add(new LiteralControl("</br></td></tr><tr><td colspan='2'>"));

......仍然很垃圾,但不是那么血腥。

仍在筛选重新思考。

答案 1 :(得分:0)

我可以想象这是有原因的:如果只为特定值创建LiteralControl的一个实例,则可能只能将此对象添加到集合中一次,具体取决于{{1容器进入。有些集合不允许相同的,唯一的对象在其中两次或更多次;因此需要创建许多唯一实例,即使其中一些具有相同的值:

Controls

在任何情况下,该代码看起来都不是特别好看。