Cache的Insert 和Add 方法引发的血案
把一个简单的CMS系统拷贝到阿里云2008服务器上后,执行一个页面操作的时候,第一次操作正常,第二次或者第三次的时候,IIS就假死。查看日志:“**错误应用程序名称: w3wp.exe,版本: 7.5.7601.17514,时间戳: 0x4ce7a5f8
错误模块名称: KERNELBASE.dll,版本: 6.1.7601.19045,时间戳: 0x56258f05**”“错误存储段 ,类型 0 事件名称: APPCRASH 响应: 不可用”。
百度了一下,各种说法都有,有说权限不够的,有说程序有错误的。于是各种权限实验,还是报同样的错误。注意到其中有一条是说,程序里面有死循环所以导致溢出。联想到程序在2003下跑得欢快,而且每次都是点特定的页面第二三次,iis才crash。
开始测试数据库是否正常。自己写了和crash页面相同功能的操作,实验多次,发现不是数据库问题。那么应该是代码问题了。不过没有源码啊没有源码。没有办法只有反对编译,使用ILSpy 反编译代码。
看源代码好像没有什么问题啊,很简单,就是获取参数,然后塞入数据库。
没法子,把源代码拷贝出来,直接放在aspx运行,还是crash,把怀疑的注释掉,终于在我注释掉一个
Lib.Second.Tags.AddTagListToCache(this.siteId);
后IIS的日志里面再也没有crash了。再反编译这个方法其实是调用了一个Cache类,再反编译:
“`
public class NewsCache
{
private static object syncObj;
protected int _timeOut = 6000;
protected static volatile Cache webCache;
public int TimeOut
{
get
{
return (this._timeOut >