asp.net 请求处理框架 每次处理完请求了,就会释放此次请求过程中所有创建的资源;但是释放资源不等于是被GC 了。GC 会在下面几种情况下进行:
1:垃圾回收器定期执行垃圾回收以回收分配给没有有效引用的对象的内存。
2:当使用可用内存不能满足内存请求时,垃圾回收会自动进行。
3:应用程序可以使用 Collect 方法强制进行垃圾回收。
所以, 如果这个请求处理过程中、发生了内存不够的情况,就会先执行一次GC 再进行请求处理;当然你可以在程序中强制执行GC。GC.Collect();方法。
这个垃圾回收没关系,ashx也就相当于一个aspx.cs文件,主要看你里面做了什么操作。
你在你的 ashx 中添加2个变量 protected static int _objCount=0; private int _objID;
然后在构造函数中:this._objID = Interlocked.Increment(ref a._objCount);
然后在你的请求中每次都增加输出 _objCount , _objID 的值.
这样就测试吧,观察 _objCount,_objID的值,就可以知道你的 a 是不是被垃圾回收了.
就算是被回收了,重新创建也不应该有这么明显的差异,我个人觉得应该还是在于客户端和服务器建立连接的耗时造成了这种差异.