在每次调用重置它们的同时,如何在C#类中使用变量?

时间:2018-08-23 17:08:55

标签: c# asp.net iis

我正在使用IIS在ASP.Net中创建一个Web API。但是,我一直静态地存储类成员,以便可以跨不同的类访问它们。这显然是一种不好的做法,我注意到每次对API的请求都由于未清除成员而返回相同的值。我如何清除成员的每个请求,同时又可以跨类访问成员?

1 个答案:

答案 0 :(得分:0)

您几乎永远不应在Web应用程序中使用静态变量。即使您希望在请求之间共享变量,在许多情况下,对静态变量的访问也不是线程安全的,这可能导致内存损坏,错误的系统行为,甚至导致系统整体故障(如果您不走运)。

如果您有需要共享的变量,请改用application variable。如果需要公共缓存,请使用已建立的caching techniques之一。

关于您的具体问题

  

我如何清除成员的每个请求,同时又可以跨类访问成员?

我认为这是一个误会。如果每次都重置变量,则绝对没有理由重复使用该变量。我猜您认为在每个请求中分配新变量会降低性能;这是错误的。使用共享变量实际上效率较低,因为多个线程将遇到false sharing,并且在每个请求完成时都必须互相等待。如果您每次使用一个新的集,则每个线程都有其自己的沙箱可以使用,并且可以更快地完成请求。

相反,将变量本地存储或作为成员变量存储在请求结束时丢弃的对象中。如果您在请求中的所有模块上都需要某个公共位置,则可以使用HttpContext.Itemone of its alternatives