| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 796 人关注过本帖
标题:对象啊,叫我如何关闭你?
只看楼主 加入收藏
cdwyj
Rank: 1
等 级:新手上路
威 望:1
帖 子:127
专家分:0
注 册:2007-2-21
收藏
 问题点数:0 回复次数:9 
对象啊,叫我如何关闭你?

听人说对象打开不关掉是不负责的行为,属于始乱终弃。

我想请问:
1、是每个对象都需要关闭么?
2、如果不管它,哪些情况下它会自动关闭呢?或者反过来说,哪种情况我应该注明关闭它?(二者选一回答,重点题)
3、不关闭对象的危害严重的哪种地步?
谢谢~

[此贴子已经被作者于2007-2-22 23:32:03编辑过]

搜索更多相关主题的帖子: 对象 始乱终弃 地步 行为 自动 
2007-02-22 22:31
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:0 
1、首先对象是基本数据类型组合而成的复杂数据类型,因此对象从某种意义上来说,属于特殊的变量。而对象被创建后,会在内存中占用一定的内存空间,如果不关闭对象。就好比内存为人的胃,人吃太多的东西不被清除就会消化不良。内存
存储的数据达到自身的最大值,这时如果再往内存里存数据,后果就会内存溢出。现象表现为计算机死机,或程序发生严重操作系统错误。
2、一般ASP中不像Java和.NET有垃圾回收机制,能够不必程序员显示清空对象在对象无用时自动释放内存。所以ASP中的对象一定要在代码中明确地进行清空或关闭,就像过马路其中一两车在马路上不走,后面就会交通拥堵的道理一样。某个对象不被关闭,其他对象就无法使用内存资源。
3、上面已经明确地说明了,不关闭对象,对象就会永久的占用内存资源。当内存资源被耗尽时,也就是出现死机或,严重系统错误,甚至某些情况下可能导致操作系统蓝屏。
2007-02-23 20:41
cdwyj
Rank: 1
等 级:新手上路
威 望:1
帖 子:127
专家分:0
注 册:2007-2-21
收藏
得分:0 
啊~~ 谢谢YMS123详细的解答~~!!拜过!
看来我得给我所有的页面都补上关闭对象操作……

看过这些解答以后又产生了一些新的问题:
1、同名的对象,如果重复打开,是否算是自动关闭了上一个呢……?
2、如果用户浏览时,ASP还来不及执行到关闭对象的操作,用户就把IE直接关闭了。长此以往也会造成拥塞的后果么?

2007-02-23 21:34
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:0 
、同名的对象,如果重复打开,是否算是自动关闭了上一个呢……?

理论上会覆盖掉原来的,但为了安全.一般是不允许这么做的~

有实力才会有魅力 实力来自坚持不懈的努力
2007-02-23 21:40
cdwyj
Rank: 1
等 级:新手上路
威 望:1
帖 子:127
专家分:0
注 册:2007-2-21
收藏
得分:0 
我做了一个单独的ASP文件用来打开CONNECTION对象。每个页面都调用了它。

我是跟着教材上这么做的。
但是这样做看起来,既找不准地方编写CLOSE,又会出现覆盖……

对象不会自然死亡么? 那这漏洞也太容易出问题了吧……
有给ASP加上垃圾回收功能的办法么?

2007-02-23 22:34
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:0 
asp没这么个功能

JAVA有~

有实力才会有魅力 实力来自坚持不懈的努力
2007-02-23 22:38
cdwyj
Rank: 1
等 级:新手上路
威 望:1
帖 子:127
专家分:0
注 册:2007-2-21
收藏
得分:0 
那我做一个单独的ASP文件用来打开CONNECTION对象。每个页面都调用了它。

这种方法是不可取的?


在CSDN上看到这么一句

不需要释放,除非是大的对象或集合,因为在脚本执行完后,会自动释放所有变量,对象等等
如果不释放对象ASP也会在页面解析完毕以后释放该页面的页面级对象

[此贴子已经被作者于2007-2-23 23:05:57编辑过]


2007-02-23 22:56
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:0 

那我做一个单独的ASP文件用来打开CONNECTION对象。每个页面都调用了它。

这种方法是不可取的?

这个方法当然好.我也经常这么用

但不要忘记了清除对象


有实力才会有魅力 实力来自坚持不懈的努力
2007-02-23 23:57
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:0 
也可以在页面末端再次include一个释放对象的ASP网页比如
conn.asp
<%
Dim con
Set con=Server.CreateObject("ADODB.CONNECTION")
……
%>
shifang.asp
<%
con.Close
Set con=Nothing
%>
index.asp
<html>
<head>
<!--#include file="conn.asp"-->
<title>首页</title>
</head>
<body>
……
</body>
<!--#include file="shifang.asp"-->
</html>
这样写需要创建的对象放到一个网页,需要释放的放到另一个网页。每个页面都include这两个网页,这样不必每个页面都写释放代码。
2007-02-24 00:00
cdwyj
Rank: 1
等 级:新手上路
威 望:1
帖 子:127
专家分:0
注 册:2007-2-21
收藏
得分:0 
高人的思维方式…… 受教!!

辛苦两位了,看茶~

2007-02-24 01:17
快速回复:对象啊,叫我如何关闭你?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033745 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved