首页 > 解决方案 > 在每次调用时如何在 C# 类中使用变量?

问题描述

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

标签: c#asp.netiis

解决方案


您几乎不应该在 Web 应用程序中使用静态变量。即使您想跨请求共享变量,在许多情况下对静态的访问也不是线程安全的,这可能会导致内存损坏、系统行为不正确,甚至整个系统故障(如果您不走运的话)。

如果您有需要共享的变量,请改用应用程序变量。如果您需要公共缓存,请使用已建立的缓存技术之一。

至于你的具体问题

我将如何清除每个请求的成员,同时还能够跨类访问它们?

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

相反,将变量存储在本地或作为成员变量存储在请求结束时丢弃的对象中。如果您需要跨请求中的所有模块的某个公共位置,您可以使用HttpContext.Item或其替代方案之一


推荐阅读