并发ASP.NET最佳实践最差实践

时间:2009-03-24 18:39:54

标签: asp.net concurrency

在哪些情况下你需要注意ASP.NET中的并发问题(并使用lock)?

  • 是否有关于此主题的“最佳做法”
  • 文档?
  • 实施例
  • '最糟糕的做法......'或者你所看到的会导致灾难的事情......?

我很好奇,例如单身人士(即使他们被认为是不好的做法 - 不要开始讨论),静态功能(你需要注意这里吗?),......?

2 个答案:

答案 0 :(得分:2)

由于ASP.NET是一个Web框架,并且主要是无状态的,因此很少需要解决并发问题。

我唯一需要处理的是管理应用程序缓存,但这很容易通过包装.NET缓存机制的缓存管理类型来完成。

答案 1 :(得分:0)

引起我们很多悲痛的一个巨大问题是在我们的主Web服务中使用模块与类。这是在我们真正了解我们正在做什么并且已经修复之前。

使用模块的一个大问题是默认情况下,ASP工作进程的每个实例都可以看到任何模块级变量。我们传入多个数据集并对其进行操作,然后将它们返回给客户端。因为我们使用模块,所以持有这些数据集的变量会被一次发生的多次调用破坏。

在我们弄清楚如何正确加载测试我们的Web服务之前,这并没有在测试中被捕获并且难以重现。在我们准确地再现它之前,每秒需要10-20个请求。

最后,我们只是将所有模块更改为类,然后使用这些类而不是对模块的调用,这清除了这个并发问题,因为每个实例化的类在内存中都有自己的数据集副本。