我们正在编写一个我们将在asp.net网站上使用的课程。这个类将使用HttpClients等下拉一些json,并使用它来向其他客户端提供信息。
其中一些信息很少会发生变化,在每个客户请求中查询信息都没有意义。
出于这个原因,我想在这个新类中为缓慢变化的信息创建一个静态构造函数,并将结果存储在一些静态成员变量中。这样就可以为我们节省一些HttpRequests - 我想。
我的问题是,在课程被ASP.Net回收之前,我可以期待信息存在多长时间,并且新的一个会在静态构造函数中再次调用?我试图做的是值得吗? ASP.Net有更好的方法来解决这个问题吗?
我没有关于ASP.Net线程池的专家或它是如何工作的以及什么对象得到回收以及何时回收。
新课程的典型用法(MyComponent
,让我们调用它)如下所示,如果有帮助的话。
//from mywebpage.aspx.cs:
var myComponent = new MyComponent();
myComponent.doStuff(); //etc etc.
//Method calls like the above may rely on some
//of the data we stored from the static constructor call.
答案 0 :(得分:2)
静态字段与AppDomain一样长。您可以考虑这是一个很好的策略,但考虑到asp运行时可能会回收应用程序池,或者有人可能会重新启动网站/服务器。
作为您想法的扩展,在本地保存数据(通过专用于此的单独服务或仅保存到硬盘驱动器),并根据需要以特定间隔刷新数据。 你仍然会在asp.net中使用静态字段来存储值,但是你将从上面的本地服务或磁盘中获取它......在这里我推荐一个System.Lazy,在thrread safe上有实例化和发布选项(参见构造函数)文档)。