首页 新闻 搜索 专区 学院

我这样定义一个静态属性有用吗

0
悬赏园豆:50 [已解决问题] 解决于 2011-09-05 19:55

public class CategoryController : BaseController
{
private static CategoryConcrete cc = null;

/// <summary>
/// 构造函数,初始化
/// </summary>
public CategoryController()
{
if (cc == null)
cc
= new CategoryConcrete();
}

public actionResult Index(int? id)
{
CategoryDetails cd
= cc.GetCategory(id);
return View(cd);
}
}
在这里我定义这个cc为静态的有用吗?

Allan GC的主页 Allan GC | 初学一级 | 园豆:50
提问于:2011-08-28 12:12
< >
分享
最佳答案
0

这里最好不要用静态的。。。

收获园豆:10
顾晓北 | 专家六级 |园豆:10215 | 2011-08-28 23:09
为什么
Allan GC | 园豆:50 (初学一级) | 2011-08-31 09:51
我其实不知道自己理解的对不对,静态的在程序运行的时候只有一个实例,然后在多个请求的时候如果修改同一个表里面的同一条数据的时候,想想这种情况。
顾晓北 | 园豆:10215 (专家六级) | 2011-08-31 11:21
可以用lock关键字锁住可能需要并发控制的方法,而且数据库一般都自带有各种锁,就算用多个实例,当同时修改的同一条记录是,数据库还是自动上了锁
IceS | 园豆:197 (初学一级) | 2011-08-31 20:27
其他回答(3)
0

按你现在的使用来说,基本没有必要设置为静态的,把static去掉吧。而且,你定义的这个是字段,不是属性。

收获园豆:40
麒麟.NET | 园豆:3614 (老鸟四级) | 2011-08-28 16:05
为什么
支持(0) 反对(0) Allan GC | 园豆:50 (初学一级) | 2011-08-31 09:51
除非new CategoryConcrete()需要很大的开销,否则这样设计没有什么益处。内存中始终跑着一个Concrete类,这样好么?而且项目里肯定不止一个Controller,每个Controller里一个静态的Concrete来负责与底层(数据库?)通信,实在没有必要。每次实例化一个Concrete,能有多大的开销?而且你这种写法,在多线程时肯定会出问题的。
支持(0) 反对(0) 麒麟.NET | 园豆:3614 (老鸟四级) | 2011-08-31 09:58
0

呵呵,应该是参考了单例模式吧。

这样做可以减少每次访问该CategoryConcrete类的方法时就不需要再创建一个实例,然后当访问结束就销毁对象。可以节省系统开销。

 

你说呢

O(∩_∩)O~

IceS | 园豆:197 (初学一级) | 2011-08-28 22:02
0

参考一下这个:

  private static CodeFactory instance = null;
        private CodeFactory()        {        }
        public static CodeFactory createInstance(){            if (instance==null)            {                instance = new CodeFactory();            }            return instance;        }

fullSunlight | 园豆:232 (菜鸟二级) | 2011-08-30 17:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册