Delegate 放在page_load里导致Session不自动Disposed

前阵子做一个项目,因为数据量大,运行了一段时间(about 2h),会导致内存暴涨,而且出现了无法预测的问题:

1)Could not find any resources appropriate for the specified culture or the neutral culture,baseName:ctl-en-us  locationinfo:<null>.ctl-en-us. 

2)Exception of Type"System.OutOfMemeryException" was thrown.

找了几天,跟踪堆栈,调试,问经验老到的同事,都没能找到真正的原因,虽然估计到了是OutMemery,但也不至于会导致上面提到的第一个如此怪异的问题,因为这是一个n次开发的项目,所以找到旧的版本来测,发现虽然占用内存很大,但还是比较稳定,最后定位到了是在page_load里有一个delegate在每次返回服务器会去+一个新的delegate,这样导致了session即使写成null,或abundom或remove,session还在内存而不自动disposed,导致内存不断累积,最终导致out of memery.最后把delegate这个罪魁祸首放到if(!ispostback)里,且去掉+直接=,就解决这个令人崩溃的问题;

问题代码 :

      WarnAndTraceHandle.Warning += new WarningHandle(CallWarning);  =>放在page_load事件内;

解决代码:

      WarnAndTraceHandle.Warning = new WarningHandle(CallWarning); =>放到page_load的if(!ispostback)语句块内;

你可能感兴趣的:(exception,session,服务器,null,resources)