首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# + WebForms + static --最佳实践是什么?

c# + WebForms + static --最佳实践是什么?
EN

Stack Overflow用户
提问于 2010-07-16 19:54:28
回答 1查看 2.4K关注 0票数 4

我绝对不是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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-16 20:17:41

在ASP.NET中,静态实例将在应用程序的生命周期内存活,即web应用程序本身,直到它被回收或关闭,例如:

代码语言:javascript
复制
public class Global : HttpApplication {
    public static string MyString
}

因此,对应用程序发出的所有请求都可以访问静态属性。不是存储页面特定项的地方。有相当多的存储机制可用:

  1. HttpRuntime.Cache和instances).
  2. HttpContext.Items,都指向相同的缓存实例,并且项在应用程序的生命周期中存在(因此具有与static HttpContext.Cache相同的问题,请求特定的项集合。向应用程序发出的每个请求都将有自己的items.
  3. HttpSessionState会话集合,并在用户访问期间或超时期间持续存在。可以通过4种方式进行配置:

3.a.InProc,则会话对象由工作进程本身存储在内存中。快速访问缓存,不需要序列化,但如果应用程序回收,会话数据就会丢失。

3.b.SqlServer,会话对象被序列化并存储在Sql Server数据库中。要求所有会话存储的项都是可序列化的。会话对象即使在应用程序回收时仍然存在。

3.c.StateServer中,会话对象存储在单独的进程中,并通过应用程序回收来持久存储数据。

3.d.自定义会话提供程序,这取决于you....

  • ViewState,这是将数据持久化到客户端并回发到服务器以重建页面视图之间的控件状态的位置。

对于任何与用户相关的内容,我都会避免使用静态实例和HttpRuntime缓存。将这些机制用于共享的、通用的信息,如配置、缓存等。会话很可能是您希望按用户存储内容的地方。如果您正在寻找按页面的解决方案,则简单得多,因为您只需将变量作为页面结构本身的一部分,作为属性或字段。您只需管理这些字段的初始化。

希望这能有所帮助。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3264544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档