首页 新闻 会员 周边 捐助

请教.net垃圾回收机制

0
[已解决问题] 解决于 2010-08-18 10:54

请教各位

我有一个接口 a.ashx,被调用的几率并不频繁,但我发现相隔较长的时间请求和连续请求的速度不一样。。。请问 如果我大于5分钟没有请求这个接口会被垃圾回收吗?如果不是为什么会慢一点那?

谢谢了!

问题补充: 没有关系的吗? 我的操作很简单就是在页面上输出个字符串 但明显速度不同 哈。。 o ~~~如果是被释放的缘故。。能不让他释放吗。。 可能是我对垃圾回收机制理解的有问题 哈 垃圾回收是回收的过期的引用类型 但为啥经常不用的功能第一次执行的时候就是很慢。。这是为啥那?请教了!
菜光的主页 菜光 | 初学一级 | 园豆:108
提问于:2010-08-12 10:24
< >
分享
最佳答案
0

asp.net 请求处理框架 每次处理完请求了,就会释放此次请求过程中所有创建的资源;但是释放资源不等于是被GC 了。GC 会在下面几种情况下进行:

1:垃圾回收器定期执行垃圾回收以回收分配给没有有效引用的对象的内存。

2:当使用可用内存不能满足内存请求时,垃圾回收会自动进行。

3:应用程序可以使用 Collect 方法强制进行垃圾回收。

所以, 如果这个请求处理过程中、发生了内存不够的情况,就会先执行一次GC 再进行请求处理;当然你可以在程序中强制执行GC。GC.Collect();方法。

HUHU慈悲 | 大侠五级 |园豆:9973 | 2010-08-12 10:36
其他回答(2)
0

这个垃圾回收没关系,ashx也就相当于一个aspx.cs文件,主要看你里面做了什么操作。

Astar | 园豆:40805 (高人七级) | 2010-08-12 10:31
0

你在你的 ashx 中添加2个变量 protected static int _objCount=0; private int _objID;

然后在构造函数中:this._objID = Interlocked.Increment(ref a._objCount);

然后在你的请求中每次都增加输出 _objCount , _objID 的值.

这样就测试吧,观察 _objCount,_objID的值,就可以知道你的 a 是不是被垃圾回收了.

就算是被回收了,重新创建也不应该有这么明显的差异,我个人觉得应该还是在于客户端和服务器建立连接的耗时造成了这种差异.

Launcher | 园豆:45050 (高人七级) | 2010-08-12 10:39
a.ashx回收不会造成这么大的差异,你可以检测下是否为应用程序域被回收了. public bool IsReusable { get { //return false; return true; } }
支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2010-08-12 11:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册