public class StaticVar
{
private static int test;
static StaticVar()
{
log4net.Config.XmlConfigurator.Configure();
log4net.ILog logger = log4net.LogManager.GetLogger("File");
logger.Info("自定义记录错误日志:222222222222" + DateTime.Now.ToString());
test = 0;
}
public static int Get()
{
test = test + 1;
return test;
}
}
现在有这样的问题,每次我访问日志生成的记事本文档,静态变量就会被初始化(也就是说,该静态构造又被重新调用),请问是什么原因?是否可以解决?或者说由于我C#基础不好才造成理解有了问题?
13 个解决方案
#1
楼主选的分类是ASP.NET,web应用程序经常会被重启,很正常。
#2
每次访问都会初始化,关闭了浏览器就释放对象了,就算是static也不行。
要保留全局变量 你可以试试在application_start中写
要保留全局变量 你可以试试在application_start中写
#3
但是我并没有主动的重新启动WEB服务,只是打开了一下bin中生成的日志文档而已。
#4
public class StaticVar
{
private static int test;
static StaticVar()
{
test = 0;
}
public static int Get()
{
test = test + 1;
return test;
}
}
private void button1_Click(object sender, EventArgs e)
{
StaticVar.Get();
}
这么用没错,你肯定用错了
#5
日志应该放在App_Data目录,更改bin目录内的文件也会导致应用程序重启.
#6
static是可以全局共享的。
我拿两个不同的浏览器测试了。确实是可以共享使用static了。
只是一打开日志文件,那么静态构造就又会重新运行了。
#7
1.我是web项目引用的一个数据访问的类库项目,在类库项目中存放着我的静态方法。
2.配置log4net能配置存储至App_Data文件中吗?
3.实际上我并没有更改bin目录内文件,只是打开了一下…
#8
web应用程序被重启,静态字段被初始化,都应该视为正常情况。即使你不动bin目录,iis也会定期回收应用程序池
#9
用单例模式就可以了
public class StaticVar
{
private static volatile StaticVar instance = null;
private static object lockHelper = new object();
private static int test;
private StaticVar()
{
log4net.Config.XmlConfigurator.Configure();
log4net.ILog logger = log4net.LogManager.GetLogger("File");
logger.Info("自定义记录错误日志:222222222222" + DateTime.Now.ToString());
test = 0;
}
public int Get()
{
test = test + 1;
return test;
}
/// <summary>
/// 单体模式返回当前类的实例
/// </summary>
/// <returns></returns>
public static StaticVar GetStaticVar()
{
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance = new Hard();
}
}
}
return instance;
}
}
StaticVar sv=StaticVar.GetStaticVar();
Response.Write("sv1="+ sv.Get() +"<br/>");
StaticVar sv2=StaticVar.GetStaticVar();
Response.Write("sv2="+ sv2.Get() +"<br/>");
#10
instance = new Hard(); 改成 instance = new StaticVar();
#11
其实我的实际项目中,是一个wcf服务…当然也是发布在IIS下的。
发现一个奇怪的问题,我在bin目录中,自己新建了一个文本文档。重新打开后,静态变量并没有被初始化。看来应该得从log4net中入手去解决这个问题了。
#12
iis寄宿,实际跟web应用程序一样了。
http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx
#13
非常感谢大家。
已经解决了,是log4net生成的日志文件的问题,生成的日志不存入Bin中就可以了。
至于为什么这样,不太清楚…
已经解决了,是log4net生成的日志文件的问题,生成的日志不存入Bin中就可以了。
至于为什么这样,不太清楚…
#1
楼主选的分类是ASP.NET,web应用程序经常会被重启,很正常。
#2
每次访问都会初始化,关闭了浏览器就释放对象了,就算是static也不行。
要保留全局变量 你可以试试在application_start中写
要保留全局变量 你可以试试在application_start中写
#3
但是我并没有主动的重新启动WEB服务,只是打开了一下bin中生成的日志文档而已。
#4
public class StaticVar
{
private static int test;
static StaticVar()
{
test = 0;
}
public static int Get()
{
test = test + 1;
return test;
}
}
private void button1_Click(object sender, EventArgs e)
{
StaticVar.Get();
}
这么用没错,你肯定用错了
#5
日志应该放在App_Data目录,更改bin目录内的文件也会导致应用程序重启.
#6
static是可以全局共享的。
我拿两个不同的浏览器测试了。确实是可以共享使用static了。
只是一打开日志文件,那么静态构造就又会重新运行了。
#7
1.我是web项目引用的一个数据访问的类库项目,在类库项目中存放着我的静态方法。
2.配置log4net能配置存储至App_Data文件中吗?
3.实际上我并没有更改bin目录内文件,只是打开了一下…
#8
web应用程序被重启,静态字段被初始化,都应该视为正常情况。即使你不动bin目录,iis也会定期回收应用程序池
#9
用单例模式就可以了
public class StaticVar
{
private static volatile StaticVar instance = null;
private static object lockHelper = new object();
private static int test;
private StaticVar()
{
log4net.Config.XmlConfigurator.Configure();
log4net.ILog logger = log4net.LogManager.GetLogger("File");
logger.Info("自定义记录错误日志:222222222222" + DateTime.Now.ToString());
test = 0;
}
public int Get()
{
test = test + 1;
return test;
}
/// <summary>
/// 单体模式返回当前类的实例
/// </summary>
/// <returns></returns>
public static StaticVar GetStaticVar()
{
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance = new Hard();
}
}
}
return instance;
}
}
StaticVar sv=StaticVar.GetStaticVar();
Response.Write("sv1="+ sv.Get() +"<br/>");
StaticVar sv2=StaticVar.GetStaticVar();
Response.Write("sv2="+ sv2.Get() +"<br/>");
#10
instance = new Hard(); 改成 instance = new StaticVar();
#11
其实我的实际项目中,是一个wcf服务…当然也是发布在IIS下的。
发现一个奇怪的问题,我在bin目录中,自己新建了一个文本文档。重新打开后,静态变量并没有被初始化。看来应该得从log4net中入手去解决这个问题了。
#12
iis寄宿,实际跟web应用程序一样了。
http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx
#13
非常感谢大家。
已经解决了,是log4net生成的日志文件的问题,生成的日志不存入Bin中就可以了。
至于为什么这样,不太清楚…
已经解决了,是log4net生成的日志文件的问题,生成的日志不存入Bin中就可以了。
至于为什么这样,不太清楚…