首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在早期进程终止时,是否有必要在‘使用’语句中调用"Close“?

在早期进程终止时,是否有必要在‘使用’语句中调用"Close“?
EN

Stack Overflow用户
提问于 2014-09-08 06:03:10
回答 3查看 144关注 0票数 1

如果我用Using语句初始化一个类,是否有必要在早期终止时调用它的Close方法?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Using xmlstream As New MemoryStream()
    Try
        'Do runtime operation

    Catch ex As Exception
        Console.WriteLine("Could not fill dataset.  REASON: " & ex.Message)
        xmlstream.Close()  '<-  NECESSARY????
        Environment.Exit(-1) '<- Early termination!
    End Try
    'DO STUFF
End Using
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-08 06:09:53

不,没有必要。根据IDisposable.Dispose方法文档

“using语句自动关闭流,并在使用它的代码完成后调用对对象的Dispose”

话虽如此,在Using块中使用Environment.Exit并不是个好主意,因为它不调用Close,实际上也不调用Dispose。相反,您应该将其重构为返回True或False的函数,并对返回值进行操作,以决定是否退出

票数 3
EN

Stack Overflow用户

发布于 2014-09-08 06:08:44

作为建议,您可以用这种方式重写。关于,你问的,程序将把方法的结束留给O.S。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Try

          Using xmlstream As New MemoryStream()
          'Do runtime operation


         End Using

Catch ex As Exception
                        Console.WriteLine("Could not fill dataset.  REASON: " & ex.Message)         
                        Environment.Exit(-1)
                    End Try
                    'DO STUFF
票数 1
EN

Stack Overflow用户

发布于 2014-09-08 06:14:59

反编译器显示在Using-statement末尾调用的Using方法如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Public Sub Dispose() Implements IDisposable.Dispose
    Me.Close()
End Sub

它由基类System.IO.Stream实现。

但是,由于您正在调用Environment.Exit(-1),所以代码将被中止,而Dispose方法也不会被调用!您可以用这个类来测试它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Class Disp
    Implements IDisposable
    Public Sub Dispose() Implements IDisposable.Dispose
        MsgBox("Disposing")
    End Sub
End Class

这个代码是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Private Sub btnTest_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnTest.Click
    Dim x = 100, y = 0, z = 0
    Using d = New Disp()
        Try
            z = x \ y
        Catch ex As Exception
            Environment.Exit(-1)
        End Try
    End Using
End Sub

它应该在消息框中显示“处理”,但不显示!如果您注释掉了Environment.Exit(-1),就会显示消息。

Using语句是作为Try Finally语句实现的,因此您的代码相当于两个嵌套的Try ... End Try块。微软的Environment.Exit法文档说:“.如果从一个try或最终块调用了Exit,那么任何catch块中的代码都不会执行。”但是,关于最终块是否被执行的文档还不清楚。然而,Try...Catch...Finally语句的文档显示:

控件不会在下列情况下从Try或Catch块传递到相应的Finally块: 在Try或Catch块中遇到一个End语句。 ·在Try或Catch块中抛出一个StackOverflowException。

结束语句的文档中写着:“End语句调用系统命名空间中的Environment类的Exit方法。”

最后,把这些信息放在一起,我们可以说:

是的,在调用xmlstream.Close() Environment.Exit(-1)**!**之前,您必须先调用

另见:在使用块中调用Environment.Exit()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25726094

复制
相关文章
EasyNVR在Windows重启时提示“进程意外终止”问题解析
Open Network Video Interface Forum,开放型网络视频接口论坛,以公开、开放的原则共同制定开放性行业标准。是一个提供开放网络视频接口的论坛组织。ONVIF规范描述了网络视频的模型、接口、数据类型以及数据交互的模式。可以让不同厂商所提供的产品,均可以通过统一的语言来进行交流,增加了协同性和灵活性。
EasyNVR
2020/04/22
1K0
EasyNVR在Windows重启时提示“进程意外终止”问题解析
使用Backstab终止受保护的进程
Backstab是一款功能强大的安全研究工具,在该工具的帮助下,广大研究人员可以轻松终止那些受反恶意软件产品保护的进程。
FB客服
2021/08/24
1.3K0
Fkill –在Linux上搜索并终止进程
Fkill是Fabulous Kill的缩写,它是一个跨平台的命令行实用程序,可一次交互式地搜索和杀死多个进程。通常,我使用“ top”命令或“ ps -ef | grep <进程名称>”或“ pidof <进程名称>”来查找进程ID,并使用命令“ kill -9 <PID>”将其kill掉。后来我发现,Fkill程序可以找到正在运行的进程,并可根据需要杀死一个或多个进程。它使用Nodejs编写,并且支持Linux、Mac OS和Microsoft Windows。
用户6543014
2020/02/21
2.4K0
Linux进程终止
在Linux下,进程退出就表示进程即将结束了(为什么是即将,这是因为Linux设计的是父进程给子进程收尸)。正常退出包括3种情形。
zy010101
2022/05/05
2.4K0
Linux进程终止
Linux 终止进程 killall
killall 命令用于杀死指定名字的进程(kill processes by name),即结束同名的的所有进程。在使用kill命令终止进程需要先获取进程PID,而使用killall命令直接使用进程名称,即可终止进程。
为为为什么
2022/08/06
2K0
终止进程的方法
kill -9 PID 如果知道进程名称,可以使用killall杀死该名称的所有进程。 killall -9 name
hankfu
2020/11/24
1.6K0
验证调用HttpServletResponse.getWriter().close()方法是否真的会关闭http连接
线上项目突然遭到大量的非法参数攻击,由于历史问题,之前的代码从未对请求参数进行校验。 导致大量请求落到了数据访问层,给应用服务器和数据库都带来了很大压力。 针对这个问题,只能对请求真正到Controller方法调用之前直接将非法参数请求拒绝掉,所以在Filter中对参数进行统一校验,非法参数直接返回400。 我的建议是不但要设置响应状态码设置为400,还应该明确调用HttpServletResponse.getWriter().close(),希望此举能在服务端主动断开连接,释放资源。 但是同事认为不必要明确调用HttpServletResponse.getWriter().close(),于是就有了这个验证实验。
编程随笔
2019/09/11
1.5K0
如何快速终止Linux进程
当你打开某个程序时,可能会遇到程序会锁死、停止运行、或者意外死机。你尝试再次运行该程序,系统反馈说原来的进程没有完全关闭。
丰一川
2018/08/16
3.6K0
【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )
状态之间的转换 , 参考 【Linux 内核】进程管理 ( Linux 中进程的 CPU 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态 | 进程生命周期之间的转换 ) 博客 ;
韩曙亮
2023/03/30
2.9K0
【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )
iOS—-SIGPIPE信号终止进程[通俗易懂]
#概念: SIGPIPE,当一个程序a调用send函数向一个服务A发送信号的数据,服务A在接收数据的时候突然挂掉、无法接收数据、没有接收者,那么内核就会发送一个SIGPIPE信号,从而中断进程,导致程序退出。
全栈程序员站长
2022/09/13
1.4K0
Mapper文件在select语句中使用
非常复杂的结果集合,Mapper文件可能长这个样子,(注意当我们在select语句中使用B.title as blog_title,在resultMap的<result property="title" column="blog_title"/> 可以不设,系统会自动映射生成<result property="title" column="blog_title"/>,但是加上更清晰,也不会增加系统负担)如下:
用户8983410
2021/10/07
8320
面试必问:进程和线程有什么区别?
进程(Process)和线程(Thread)都是操作系统中的基本概念,它们之间有一些优劣和差异。
编程珠玑
2019/07/12
1K0
jasperreports ireport使用sql语句中有in时动态赋值,666
<parameter name="a_id" class="java.util.List"/> <queryString language="SQL"> <![CDATA[select * from Apoplexy where $X{IN, apoplexy_id, a_id}]]> </queryString> import net.sf.jasperreports.engine.JRExporter; import net.sf.jasperreports.engine.JRExporterPara
Java架构师必看
2021/10/18
9980
Windows内核之进程的终止和子进程
<2>进程中的一个线程调用ExitProcesss函数(应该避免使用这样的方法)。
全栈程序员站长
2022/07/12
1.7K0
kill命令批量终止后台进程
因为数据量太大,大概一次执行太多了,总共727个样本,.sra文件每个平均大概5个G。一次批量转成200个样本到fq格式,结果内存爆了。所以需要终止进程。
Y大宽
2019/05/21
2.5K0
kill命令批量终止后台进程
WPF 使用RPC调用其他进程
如果在 WPF 需要用多进程通信,一个推荐的方法是 WCF ,因为 WCF 是 RPC 计算。先来讲下 RPC (Remote Procedure Call) 远程过程调用,他是通过特定协议,包括 tcp 、http 等对其他进程进行调用的技术。详细请看百度
林德熙
2018/09/18
9690
【Linux】进程控制(创建、终止、等待)
在前文中我们了解了fork函数的使用,以及写时拷贝机制的原理等,并且也学习了什么是僵尸进程,但是并没有具体讲到应如何处理僵尸进程,本次章节将对fork函数以及如何终止进程,还有僵尸进程的处理做更为详细的探讨。
诺诺的包包
2023/04/02
3.5K0
【Linux】进程控制(创建、终止、等待)
在bash中检测进程是否正在运行
比如我们启动了一个这样的进程python -m SimpleHTTPServer 8000,我们想检测这个进程是否存在,可以这样。
技术小黑屋
2018/09/04
3.6K0
进程?线程?小朋友你是否有很多问号?
标准定义:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行程序的实例,包括程序计数器、寄存器和程序变量的当前值。
五分钟学算法
2020/12/22
7720
进程?线程?小朋友你是否有很多问号?
​window.close后面的代码是否执行呢??
window.close后面的代码是否执行??在window.close后面加上alert("123");发现窗口并没有关闭,而是在执行了alert('')语句后,才关闭了窗口
用户9914333
2022/07/21
3960
​window.close后面的代码是否执行呢??

相似问题

是否有必要在进程终止时关闭gen_tcp连接?

12

调用函数时进程终止

20

RxKotlin -在调用dispose时终止进程

10

使用getWritableDatabase()时是否需要调用close()?

10

永远不要在进程被终止时调用Create

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文