单例,数据表,缓存的问题 本帖最后由 henry3695 于 2010-01-03 15:16:56 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1. 在cache中的内容不保证始终有效,在内存紧张等情况下系统会自动释放cache中的内容2. 第二种方法称不上是单例模式,因为m_dt是实例变量,每一个类实例都有一份m_dt,把它改成static 第二种方法,我是定义了这么一个类,这个类能且只能被new一个实例的 从你写的两个来看,相对来说第一种比较好。你写的第二种不能说是单例模型,即使你说“这个类能且只能被new一个实例的”。在单例模型中增加lock锁,处理并发。将第二种修改下使用第二种比较好. 其实2种都不好。1.缓存其实是很少的。如果你要保存很多东西,不要用Cache。2.应该写成 private static DataTable m_dt;。但问题也很明显,静态变量也是用堆栈的,空间也不是很多,如果数据大也不建议这样用。而且最重要问题是,静态变量是永远存在的,你不知道什么时候更新数据,所以如果真的要使用,应该加个看门狗之类的程序定时去检查数据有没有更新,有的话就清空。个人建议,如果数据量大应该用memcache;数据量少,可以用static 。 //这是微软提供的单例代码 using System; public sealed class Singleton { private static volatile Singleton instance; private static object syncRoot = new Object(); private Singleton() {} public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new Singleton(); } } return instance; } } } 貌似一个用的是局部变量,一个用的是全局变量,就这点差别啊。还有别的么?逻辑是一样一样的啊。并发问题?什么并发问题?两个都是实例有什么并发问题?如果说的是Cache,在MSDN里面有句话:This type is thread safe. SWFUpload批量上传文件的问题!!!!! asp.net中能否写程序更改HTTP请求头??? 打开别人的ASP.NET显示的是母版页错误 怎么回事? 生成html时循环生成select的问题 DataGrid的分页问题 请教网页乱码的问题别人用Dreamweave写的网页vs2005打开后乱码. 为什么同一个带参数的地址得到的结果不一样? (高难度)像Notes那样可伸缩(在线等待) asp.net项目无法调试!!?? ===这句时间查询的sql错在那里? 求自动播音控件 正则表达式截取字符串
2. 第二种方法称不上是单例模式,因为m_dt是实例变量,每一个类实例都有一份m_dt,把它改成static
第二种方法,我是定义了这么一个类,这个类能且只能被new一个实例的
//这是微软提供的单例代码
using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}