因为asp.net包含多个同时执行的线程
所以如果2个线程访问我从asp.net httpcontext Cache获得的对象(简单或复杂)
如果这2个theads试图同时修改/读取它,这不能导致该对象的状态问题吗?
那么我应该采取什么样的预防措施呢?
例如,我想也许在使用它时锁定对象? (这不会导致性能问题吗?)
或者当我从缓存中检索某个对象时,我应该从中创建一个副本?
或者我可能根本不需要担心这个问题?
感谢
答案 0 :(得分:0)
在5年多的ASP.NET开发项目中,我从来没有遇到过担心的情况。
有人说......你肯定不会有任何问题阅读任何项目。如果您有一个要经常修改的对象,为什么它在缓存中开始?如果您不需要经常修改它,那么锁定对象将不会是性能问题。
答案 1 :(得分:0)
您需要根据问题的背景来决定这一点,一个尺寸适合所有解决方案在这里不起作用。如果您只是阅读数据,那么您将没有线程问题。如果您经常向此写入数据,则使用缓存毫无意义。如果它有点混合和缓存确实有助于性能等,那么你要么需要采用正常的线程同步技术(例如读写器锁),要么在对象的更改总是创建新对象的情况下使对象不可变。这个选择会导致自己的线程问题,因为新对象必须替换缓存中的旧对象。