在asp.net 3.5网站中使用静态函数

时间:2014-05-28 07:03:29

标签: c# asp.net

我正在构建一个ASP.NET Web应用程序,其中我使用了几个包含静态函数的类来检索数据库值等(基于用户会话,因此它们的结果是特定于会话的,而不是应用程序范围的。)

也可以通过标记调用这些函数,这样可以快速轻松地开发GUI。

现在我想知道:这是正确的做事方式,还是创建一个包含这些函数的类并在需要时创建类的实例更好?

当这个网站有很多访问者时会发生什么?访问者是否必须等到功能准备就绪后才能使用#39;如果它也被另一个会话召唤?或者IIS会将工作负载分散到多个线程上吗?

或者这仅仅取决于个人偏好,而且应该测试什么效果最好?

编辑和补充问题:

我使用的代码如下:

public class HandyAdminStuff
{
  public static string GetClientName(Guid clientId)
  {
    Client client = new ClientController().GetClientById(clientId);
    return client.Name;
  }
}

完成此功能后,是否会处理Client和ClientController类? GarbageCollector会处理它们吗?或者他们会继续生活吗?每次调用函数时都会增加内存量?


**请,我不需要像以下那样的答案:'测量而不是询问,我知道。我希望根据他们的经验,从能够给出一个好的答案的人那里获得反馈,或许是一些专业人士或缺点。谢谢。

3 个答案:

答案 0 :(得分:1)

“访问者是否必须等到该功能'准备就绪',如果它也被另一个会话调用了?”

是。如果您具有线程安全功能体,或者在锁定DB的事务中执行某些数据库操作,则可能会发生这种情况。

看看这些主题:

http://forums.asp.net/t/1933971.aspx?THEORY%20High%20load%20on%20static%20methods%20How%20does%20net%20handle%20this%20situation%20

Does IIS give each connected user a thread?

答案 1 :(得分:1)

最好有基于实例的对象,因为它们也可以很容易处理(可能是连接?),除了提到的所有问题之外,你不必担心多线程问题。

例如,静态DAL层的每个函数都应该是原子的。也就是说,dal内部的调用之间不应该共享任何变量。 asp.net中常见的错误是认为 [TreadStatic] 数据在静态函数中使用是安全的。每个请求数据存储的唯一安全池是 Context.Items 池,其他一切都不安全。

编辑: 我忘了回答关于IIS线程的问题。客户的每个请求都将由不同的线程处理。只要您不使用会话状态,来自同一用户的并发请求也将由不同的线程同时处理。

答案 2 :(得分:0)

我不建议使用静态函数来检索数据。这是因为这些静态函数会使您的代码更难以测试,更难维护,并且无法利用任何oo主体进行设计。您最终会得到更多重复的代码等。