我绝对不是WebForms的粉丝,我更喜欢在.NET的世界里使用ASP.NET MVC。
无论如何,我正在开发一个非常大的遗留WebForms应用程序的一小部分。
我正在集成Korzh.com的EasyQuery.NET,以允许终端用户基于预定义的模型创建他们自己的SQL查询,使得用户使用别名变得友好。
这是相关的,因为Korzh的演示使用了Global.asax作为其模型,并且
查询类和会话。
因为遗留的WebForms应用程序非常大,所以没有使用Global.asax
用于特定于页面的项。
我的解决方案是使用私有静态。静态在台式机中运行良好
应用程序,但似乎最不可能在WebForms应用程序中造成一些痛苦。
我发现了这一点!IsPostBack不太可靠,在我看来
在WebForms中,最佳实践可能是使用会话。的问题
会话的特点是,它似乎是通过HTML传递给客户端的,并且可以不断增长
以千字节为单位的非常大。
问题:
由于静态变量在与WebForms一起使用时驻留在IIS服务器上,因此WebForms应用程序的每个用户是否共享相同的静态变量地址空间?(我认为答案是肯定的)。
在ASP.NET WebForms应用程序中使用/不使用静态变量的最佳实践/指南是什么?
谢谢。
致以敬意,
格里(Lowry)
附言:我找不到答案
通过Google或搜索SO。
发布于 2010-07-16 20:17:41
在ASP.NET中,静态实例将在应用程序的生命周期内存活,即web应用程序本身,直到它被回收或关闭,例如:
public class Global : HttpApplication {
public static string MyString
}因此,对应用程序发出的所有请求都可以访问静态属性。不是存储页面特定项的地方。有相当多的存储机制可用:
3.a.InProc,则会话对象由工作进程本身存储在内存中。快速访问缓存,不需要序列化,但如果应用程序回收,会话数据就会丢失。
3.b.SqlServer,会话对象被序列化并存储在Sql Server数据库中。要求所有会话存储的项都是可序列化的。会话对象即使在应用程序回收时仍然存在。
3.c.StateServer中,会话对象存储在单独的进程中,并通过应用程序回收来持久存储数据。
3.d.自定义会话提供程序,这取决于you....
对于任何与用户相关的内容,我都会避免使用静态实例和HttpRuntime缓存。将这些机制用于共享的、通用的信息,如配置、缓存等。会话很可能是您希望按用户存储内容的地方。如果您正在寻找按页面的解决方案,则简单得多,因为您只需将变量作为页面结构本身的一部分,作为属性或字段。您只需管理这些字段的初始化。
希望这能有所帮助。
https://stackoverflow.com/questions/3264544
复制相似问题