日期:2014-05-20  浏览次数:20779 次

各位新年好,一个UnityContainer的问题高分求解
原来有个小网站,运行一段时间后就有可能出现InvalidOperationException (集合已更改,无法进行枚举)
看堆栈跟踪,原因是调用了UnityContainer的IsRegistered方法,里面会对一个字典进行迭代。
但是UnityContainer只在ApplicationStart时进行类型注册,其他时候不会对类型注册的字典改动,为什么会出现这个问题呢。
自己猜想可能是并发冲突或者资源回收的问题,但是在本地如何试验都没一点问题,在服务器iis上运行就不行了,我都快疯了。
asp.net ?unity ?unitycontainer ?web ?iis

------解决方案--------------------
不管什么原因,在出现问题的foreach代码之前将集合列表用ToList()装入一个副本,对副本迭代。
------解决方案--------------------
很可能是并发导致的,对这段代码加上线程锁看看?
------解决方案--------------------
服务器上用日志跟踪一下吧,说不定还就是有问题。
------解决方案--------------------
各种看不懂,帮顶
------解决方案--------------------
运行一段时间后出现的问题,在服务器上加上日志看一下吧。