应该使用哪些技术来处理ASP.NET缓存中的对象,以防止多个ASP.NET Worker线程访问的问题?

StackOverflow https://stackoverflow.com/questions/3672281

由于ASP.NET包含同时执行的多个线程。
因此,如果2个线程访问我从ASP.NET httpcontext缓存获得的对象(简单或复杂)。
如果这2个theads试图同时修改/阅读,这不会导致该对象上的状态问题?
那么我应该采取什么样的预防措施?
例如,我想可能在使用该物体时锁定该对象? (不会导致性能问题?)
或者,也许当我从缓存中检索一些对象时,我应该从中创建一个副本?
或者,也许我根本不必担心这个问题?
谢谢

有帮助吗?

解决方案

您需要根据问题的上下文来决定这一点,一个尺寸适合所有解决方案在这里无法使用。如果您仅读取数据,那么您将没有线程问题。如果您经常写数据,则使用缓存毫无意义。如果它有点混合和缓存确实有助于性能等,那么您要么需要诉诸普通线程同步技术(例如读取器writer锁),也许可以使对象不可变,而在对象的更改始终创建新对象。这种选择会导致其自身的线程问题,因为新对象必须替换缓存中的旧对象。

其他提示

在5年以上的ASP.NET开发项目中,我从未遇到过这种担心的情况。

话说...你当然不会遇到问题 阅读 任何项目。如果您有要经常修改的对象,为什么在缓存中开始使用它?如果您不需要经常修改它,那么锁定对象就不会成为性能问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top