缓存加载方法在构造函数中调用以设置计时器,这是不好的方法吗?
Cache load Method call in constructor to set timer, is it bad approach?
在一个 C# 项目中,我在构造函数中调用了缓存加载方法来设置计时器。这是个坏主意吗?
public MyConstructor()
{
cacheDataManager = new MemoryCacheManager();
var timer = new System.Threading.Timer(
e => LoadMyCacheData(),
null,
TimeSpan.Zero,
TimeSpan.FromSeconds(30));
}
//cache data method LoadMyCacheData
你错了2处。
1- 如果您在 public 构造函数中初始化缓存,当您从 class 创建新实例时,您的缓存已加载。要解决此问题,您必须创建静态构造函数
static MyConstructor()
{
cacheDataManager = new MemoryCacheManager();
var timer = new System.Threading.Timer(
e => LoadMyCacheData(),
null,
TimeSpan.Zero,
TimeSpan.FromSeconds(30));
}
2- 在你的解决方案中缓存是一个 class 级别并且这个概念是远缓存概念
public class MyConstructor
{
public void Do()
{
MemoryCacheManager.Instance.myObject.ToString();
}
}
public class MemoryCacheManager
{
private MemoryCacheManager()
{
myObject = new object();
}
private static MemoryCacheManager _cacheManager;
public static MemoryCacheManager Instance
{
get
{
if(_cacheManager==null)
_cacheManager=new MemoryCacheManager();
return _cacheManager;
}
}
public object myObject { get; private set; }
}
要解决此问题并移至项目中的缓存级别,您必须使用单例模式
但企业应用程序更好的解决方案是使用缓存服务器,如 Ncache 或 appfabric
在一个 C# 项目中,我在构造函数中调用了缓存加载方法来设置计时器。这是个坏主意吗?
public MyConstructor()
{
cacheDataManager = new MemoryCacheManager();
var timer = new System.Threading.Timer(
e => LoadMyCacheData(),
null,
TimeSpan.Zero,
TimeSpan.FromSeconds(30));
}
//cache data method LoadMyCacheData
你错了2处。 1- 如果您在 public 构造函数中初始化缓存,当您从 class 创建新实例时,您的缓存已加载。要解决此问题,您必须创建静态构造函数
static MyConstructor()
{
cacheDataManager = new MemoryCacheManager();
var timer = new System.Threading.Timer(
e => LoadMyCacheData(),
null,
TimeSpan.Zero,
TimeSpan.FromSeconds(30));
}
2- 在你的解决方案中缓存是一个 class 级别并且这个概念是远缓存概念
public class MyConstructor
{
public void Do()
{
MemoryCacheManager.Instance.myObject.ToString();
}
}
public class MemoryCacheManager
{
private MemoryCacheManager()
{
myObject = new object();
}
private static MemoryCacheManager _cacheManager;
public static MemoryCacheManager Instance
{
get
{
if(_cacheManager==null)
_cacheManager=new MemoryCacheManager();
return _cacheManager;
}
}
public object myObject { get; private set; }
}
要解决此问题并移至项目中的缓存级别,您必须使用单例模式 但企业应用程序更好的解决方案是使用缓存服务器,如 Ncache 或 appfabric