关于网站大并发情况下的数据的初始化如何处理。
简短节说:网站在运行过程中,一些缓存数据需要初始化工作,那么在大并发情况下会造成数据重复。
举例 if(arrArea == null)
{
List arrArea = new List();
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
假如该段代码不是放在Application_Start方法体中,而是在网站首页上。就会造成arrArea被重复插入相同的数据。
因为瞬间并发多,if(arrArea == null)逻辑判断会来不及。
那么就要进行线程间的同步。
string tongbu = "abc";
lock(tongbu)
{
if(arrArea == null)
{
List arrArea = new List();
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
}
也可以,
Type tempType = Typeof(_Default);
Monitor.Enter(tempType );
if(arrArea == null)
{
List arrArea = new List();
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
Monitor.Exit(tempType);
还有很多种方式。我想知道的是,有没有更加高明的方法,因为貌似这两种方法都不太好,我在一个每天流量20万的网站上测试发现不是太稳定。
-----------------------
不好意思,之前排版有点问题。我发此文目的是想了解大家都在使用什么高明的方法。
举例 if(arrArea == null)
{
List
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
假如该段代码不是放在Application_Start方法体中,而是在网站首页上。就会造成arrArea被重复插入相同的数据。
因为瞬间并发多,if(arrArea == null)逻辑判断会来不及。
那么就要进行线程间的同步。
string tongbu = "abc";
lock(tongbu)
{
if(arrArea == null)
{
List
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
}
也可以,
Type tempType = Typeof(_Default);
Monitor.Enter(tempType );
if(arrArea == null)
{
List
arrArea.add(1);
arrArea.add(2);
Cache.Insert(arrArea);
}
Monitor.Exit(tempType);
还有很多种方式。我想知道的是,有没有更加高明的方法,因为貌似这两种方法都不太好,我在一个每天流量20万的网站上测试发现不是太稳定。
-----------------------
不好意思,之前排版有点问题。我发此文目的是想了解大家都在使用什么高明的方法。