首页 / C# / aspx对c#静态变量提供特殊处理吗
aspx对c#静态变量提供特殊处理吗
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了aspx对c#静态变量提供特殊处理吗,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1762字,纯文字阅读大概需要3分钟。
内容图文
![aspx对c#静态变量提供特殊处理吗](/upload/InfoBanner/zyjiaocheng/656/4b4e317f087d45b4a2ba8d5406524cc7.jpg)
在.net Web应用程序中,.aspx页面和页面后面的c#代码有一些特殊之处,它们可以更改静态变量的行为.
我有大量在其他地方开发的应用程序页面,并且有一个贯穿它们的通用模式,在该模式下,我认为应该是实例变量的地方被声明为静态变量.
问题的更详细说明是:如果我在同一应用程序池的同一iis服务器上运行两个Web会话a和b,如果a访问有问题的页面并将静态变量x设置为value1,然后b访问在同一页面上,并将静态变量x设置为值2,我的理解是将value1替换为value2.我的难题是,该模式在代码中反复使用,在较高的层次上,代码似乎可以工作.结论是运气好(在会话b之前,会话a放弃了对变量的需要),或者发生了其他情况.
我愿意提出建议,无论这是C#细微差别还是开发人员错误.
解决方法:
静态属性/字段在Web应用程序中很好,只要它们用于共享数据即可,这些共享数据可以随时可接受地消失,例如在应用程序池回收时.
也就是说,它们的值的确在ASP.Net应用程序内部共享,除非它们具有诸如Session之类的独立的支持机制.
例
public static int UserId = 10; // BAD! everyone gets/sets this field's value
// BAD! everyone gets/sets this property's implicit backing value
public static int UserId {
get;
set;
}
// This case is fine; just a shortcut to avoid instantiating an object.
// The backing value is segregated by other means, in this case, Session.
public static int UserId{
get{
return (int)HttpContext.Current.Session["UserId"];
}
}
// While I would question doing work inside a property getter, the fact that
// it is static won't cause an issue; every call retrieves data from a
// database, not from a single memory location.
public static int UserId{
get{
// return some value from database
}
}
除非流量很大,否则您可能看不到问题.假设页面检索一个值,将其放入静态变量,使用一次,然后完成执行.如果页面执行迅速,除非时间合适和/或流量足够高,否则您可能看不到很小的重叠窗口(但很危险!).
这可能会导致难以诊断的错误,因为它们取决于时间,在本地计算机上自己进行测试时,您可能看不到它们.
内容总结
以上是互联网集市为您收集整理的aspx对c#静态变量提供特殊处理吗全部内容,希望文章能够帮你解决aspx对c#静态变量提供特殊处理吗所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。