Disposal_Request_2013-03-04

合集下载

Net高级技术——IDisposable

Net高级技术——IDisposable

Net高级技术——IDisposableIDisposable概述GC(垃圾收集器)只能回收托管(Managed)内存资源,对于数据库连接、文件句柄、Socket 连接等这些资源(非托管资源,UnManaged)就无能为例,必须程序员自己控制资源的回收。

非托管资源:SqlConnection、FileStream等。

对于使用非内存资源的类,完全可以自己定义一个销毁资源的方法来供程序员回收,.net推荐实现IDisposable接口(为了规范非托管资源的回收),在Dispose方法中进行回收。

实现了IDisposable接口的对象都可以使用using进行资源管理。

using就是帮我们做了:复制代码1 FileStream fs = new F.....2 try {3 fs.read()....4 }5 finally {6 fs.Dispose();7 }复制代码实现了IDisposable接口的对象都要进行回收,否则很可能有内存泄露。

非托管内存资源才需要实现IDisposableIDisposable例子复制代码1 namespace 资源回收2 {3 class Program4 {5 static void Main(string[] args)6 {7 //使用using对实现IDisposable的类了进行资源管理8 /*拿到一个对象的时候,首先判断这个对象是否实现了IDisposable接口,如果实现了,最好就用using包裹住这个对象,保证这个对象用完之后被释放掉,否则很可能出现资源泄露的问题9 */10 using (Telphone t1 = new Telphone())11 {12 t1.Open();13 t1.Speak("hello");14 t1.Bomb();15 //t1.Dispose();//如果在这里调用了Dispose()方法释放资源,那么在执行t1.Open()方法就出错,电话线已经被剪断了,无法再打电话了16 t1.Open();17 t1.Speak("I am back!");18 }//代码执行到这里后,就会调用Dispose方法来进行资源回收19 Console.ReadKey();20 }21 }22 /// <summary>23 /// Telphone类实现了IDisposable接口24 /// </summary>25 class Telphone : IDisposable26 {27 /// <summary>28 /// 电话状态29 /// </summary>30 private TelphoneState state;31 /// <summary>32 /// 打电话33 /// </summary>34 public void Open()35 {36 if (state == TelphoneState.Disposed)37 {38 throw new Exception("电话线已经被剪断,无法打开!");39 }40 state = TelphoneState.Open;41 Console.WriteLine("拿起电话");42 }43 /// <summary>44 /// 说话45 /// </summary>46 /// <param name="s">说话内容</param>47 public void Speak(string s)48 {49 if (state != TelphoneState.Open)50 {51 throw new Exception("没有连接");52 }53 Console.WriteLine(s);54 }55 /// <summary>56 /// 挂掉电话57 /// </summary>58 public void Bomb()59 {60 state = TelphoneState.Close;61 Console.WriteLine("挂掉电话");62 }63 #region IDisposable 成员64 /// <summary>65 /// 实现IDisposable接口中的Dispose()方法来释放非托管资源66 /// 如何释放非托管资源由程序自己定67 /// </summary>68 public void Dispose()69 {70 if (state == TelphoneState.Open)71 {72 Bomb();//挂掉电话73 }74 state = TelphoneState.Disposed;75 Console.WriteLine("剪断电话线");76 }77 #endregion78 }79 /// <summary>80 /// 电话状态枚举81 /// </summary>82 enum TelphoneState83 {84 Open, Close, Disposed85 }86 }.Net高级技术——结构体结构体结构体和类的区别:结构体是值类型,类是引用类型结构体非常类似于类,但是值类型(拷贝传递),不能被继承Int32、DateTime等都是结构体,从ValueType继承,值类型。

第14章文件读写——资源使用与处置

第14章文件读写——资源使用与处置
/
14.3 析构函数
类的析构函数( ):用于对象的善后清理处理 类的析构函数(destructor):用于对象的善后清理处理 ): 工作,作用与构造函数相反。 工作,作用与构造函数相反。 类析构函数的语法形式: 类析构函数的语法形式:
~类名() { ... }
析构函数不能有public等访问性修饰符,不能带参数, 等访问性修饰符,不能带参数, 析构函数不能有 等访问性修饰符 不能被重载。一个类最多只能有一个析构函数。 不能被重载。一个类最多只能有一个析构函数。 析构函数不能被应用程序显式调用,它是在垃圾回收期间自 析构函数不能被应用程序显式调用, 动被调用的。 动被调用的。 就是说,在对象销毁时,其析构函数才能运行。 就是说,在对象销毁时,其析构函数才能运行。
/
【例14-1】测试对象生存、垃圾回收、以及对 14测试对象生存、垃圾回收、 象与引用变量的关系。 象与引用变量的关系。
Circle c1 = new Circle(5); Console.WriteLine("创建了圆对象,其半径是 " + c1.Radius); Circle c2 = c1; c1 = null; GC.Collect(); Console.WriteLine("强制启动垃圾回收..."); for (int i = 1; i <= 1000000; i++) ; Console.WriteLine("已运行了1百万次自增和比较运算。 "); Console.WriteLine("半径为 " + c2.Radius + " 的圆对象仍存在。"); ... class Circle { public double Radius { get; set; } public Circle(double r) { Radius = r; } }

[学习笔记]Dispose模式

[学习笔记]Dispose模式

[学习笔记]Dispose模式Dispose模式是.NET中很基础也很重要的⼀个模式,今天重新复习⼀下相关的东西并记录下来。

什么是Dispose模式?什么时候我们该为⼀个类型实现Dispose模式使⽤Dispose模式时应该注意什么?怎样实现⼀个Dispose模式?Dispose模式的例⼦什么是Dispose模式?要知道什么是Dispose模式必须先了解两个概念:资源和GC的基本原理。

资源指的是⼀些类似于Windows句柄,数据库连接的⾮内存的⼀些本地资源,这些资源⽆法被运⾏时本⾝管理,需要程序员⾃⼰去申请和释放。

当⼀些托管类型中对这些资源进⾏⼀定的封装的时候,我们就需要妥善的去处理他们,⽐如说在不⽤的时候释放到这些资源以免造成资源泄露。

但是你怎么知道什么时候不⽤呢?⽆法知道,这个只有使⽤这个类型的⼈知道,所以我们需要在Finalize⽅法中对资源进⾏释放,这个有点像C++中的析构函数,但是不⼀样的是.NET中的Finalize⽅法是由运⾏时来调⽤⽽⾮⽤户。

扯了这么多,貌似只要在Finalize⽅法中释放掉资源就⾏了,那Dispose模式⼜是⼲嘛的?正如上⾯提到的,Finalize⽅法只能由运⾏时来调⽤,⽤户⽆法控制什么时候这个⽅法会被调⽤。

了解⼀下GC的基本⼯作原理,我们会发现具有Finalize⽅法的垃圾对象会在垃圾回收的时候放⼊⼀个“垃圾队列”,但是这个垃圾队列并不是说下⼀次垃圾回收的时候就会调⽤,⽽是会在下⼀次内存压缩(compact)的时候才会去调⽤。

[1]你不知道这货啥时候才会去调⽤那个Finalize⽅法,也就是说很可能你这个对象会存活很久(占⽤内存),并且这个资源⼀直得不到释放(占⽤资源)!我写了下⾯这个简单的代码做了⼀下测试,只是为了验证⼀下并不是多次GC就会去调⽤Finalize⽅法的。

internal class Resource{public void DoSomething(){}~Resource(){Console.WriteLine("In Finalize");}}internal class Program{private static void Main(string[] args){var res = new Resource();res.DoSomething();int i = 100;while (i-- > 0){GC.Collect();}Console.Read();}}那么既然Finalize⽅法的调⽤⽆法控制,于是就引⼊了Dispose模式,实现IDispose⽅法来提供⼀个Dispose⽅法允许调⽤者⼿动去调⽤Dispose⽅法释放资源。

C#释放非托管资源

C#释放非托管资源

C#释放⾮托管资源C#中资源分为托管资源和⾮托管资源。

托管资源由垃圾回收器控制如何释放,不需要程序员过多的考虑(当然也程序员也可以⾃⼰释放)。

⾮托管资源需要⾃⼰编写代码来释放。

那么编写好的释放⾮托管资源的代码(释⾮代码)由谁来调⽤呢。

有两种实现⽅式:⼀将释⾮代码放到构造函数析构函数中,由系统⾃动调⽤,系统会在资源对象不再使⽤了,会在某个时间调⽤构造函数析构函数来释放⾮托管资源。

构造函数析构函数的⽬的就是⽤来释放或清理⾮托管资源的。

但它有⼀个问题是调⽤的时间是系统说了算,不能在程序中⾃⼰想要调⽤时调⽤析构函数,这是C#规定的。

那么就产⽣了第⼆种⽅式。

⼆将释⾮代码放到另外⼀个函数中,当⾃⼰想调⽤时就调⽤。

将释⾮代码放在⼀个⽅法中共⽤,代码如下:1 MyClass2 {3 ~MyClass()4 {5 DisposePro();6 }78public void Dispose()9 {10 DisposePro();11 }1213private void DisposePro()14 {15// 释⾮代码16 ......17 }18 }但是这样可能会产⽣其他问题。

资源可能会被多次释放,⽽产⽣问题。

系统会⾃动调⽤析构函数,⾃⼰也可能多次调⽤Dispose()⽅法。

那么解决⽅法是使⽤⼀个全局变量作为标记,来标记资源是否已经被释放,已经释放就不再释放。

代码如下:1 MyClass2 {3private bool disposed = false;4 ~MyClass()5 {6 DisposePro();7 }89public void Dispose()10 {11 DisposePro();12 }1314private void DisposePro()15 {16if(disposed == false)17 {18// 释⾮代码19 ......20 }21 disposed = true;22 }23 }这样看起来似乎没有问题了。

c#Dispose模式(转)-charming-博客园

c#Dispose模式(转)-charming-博客园

c#Dispose模式(转)-charming-博客园展开全文c# Dispose模式(转)本文讲解的是你在建立包含内存以外资源的类型,特别是处置非内存资源的时候,如何编写自己的资源管理代码。

我们已经知道了处置那些占用非受控(unmanaged)资源的对象的重要性,现在应该编写资源管理代码来处置那些包含非内存资源的类型了。

整个.NET框架组件都使用一个标准的模式来处理非内存资源。

使用你建立的类型的用户也希望你遵循这个标准的模式。

标准的处理模式的思想是这样的:当客户端记得的时候使用IDisposable接口释放你的非受控资源,当客户端忘记的时候防护性地使用终结器(finalizer)。

它与垃圾收集器(Garbage Collector)一起工作,确保只在必要的时候该对象才受到与终结器相关的性能影响。

这是处理非受控资源的一条很好的途径,因此我们应该彻底地认识它。

类层次体系中的根基类(root base class)必须实现IDisposable 接口以释放资源。

这个类型还必须添加一个作为防御机制的终结器。

所有这些程序都把释放资源的工作委托给一个虚拟的方法,衍生的类可以根据自己的资源管理需求来重载该方法。

只要衍生的类必须释放自己的资源,并且它必须调用该函数的基类版本的时候,它才需要重载这个虚拟方法。

开始的时候,如果你的类使用了非内存资源,它就必须含有一个终结器。

你不能依赖客户端总是调用Dispose()方法。

因为当它们忘记这样做的时候,你就面临资源泄漏的问题。

没有调用Dispose是它们的问题,但是你却有过失。

用于保证非内存资源被正确地释放的唯一途径是建立终结器。

当垃圾收集器运行的时候,它立即从内存中删除所有不带终结器的垃圾对象。

所有带有终结器的对象仍然存在于内存中。

这些对象都被添加到终结队列,垃圾收集器引发一个新线程,周期性地在这些对象上运行终结器。

在这些终结程序线程完成自己的工作之后,就可以从内存中删除垃圾对象了。

如何修改sap已释放的请求

如何修改sap已释放的请求

如何修改已释放的请求SOURCE CODE.TABLES: e070.PARAMETERS : p_trkorr LIKE e070-trkorr OBLIGATORY.UPDATE e070 SET trstatus = 'D' WHERE trkorr = p_trkorr.IF sy-subrc = 0.COMMIT WORK.MESSAGE '搞定!' TYPE 'S'.ELSE.ROLLBACK WORK.MESSAGE '出错!' TYPE 'E'.ENDIF.纯手工1.找到你已经释放但是又需要修改的请求号2.进入E070表中,找到你的请求,此时该请求的TRSTATUS是R-已释放状态.我们要只把该字段的值改为D-修改状态,即可.(个人习惯是先修改子请求,再修改母请求.)3.输入调试命令,按两次回车,进入DEBUG界面.4.修改CODE值为EDIT (注意大写). 按F8.5.将TRSTATUS字段改为D. 并保存.6.此时请求号会变成这样,但还是存在于已释放清单中.7.然后如法炮制母请求号,请求号就会回到可修改清单中.8.Now You Can Do Whatever You Want.接下来的步骤分两种情况:9.IF: 此请求是第一次释放,并未传输. 那么确认修改无误后,即可再次释放. STMS里此请求号呈”待转输”状态, 可正常传输10.ELSEIF: 此请求已传输到测试系统,如QAS,PRE.虽然可以直接释放,但是个人建议还是在STMS先将为“已传输”状态的该请求删除后,再释放,然后STMS刷新就会出现“待传输”状态的该请求.因为我遇到过,我不删除QAS,PRE里“已传输”状态的请求,直接在DEV修改后再次释放的话. STMS 不出现”待传输”状态.也许是本人人品问题. 但是还是建议,先删除再释放,这样比较保险.或者刷新不出来,就添加.11.ENDIF.文案编辑词条B 添加义项?文案,原指放书的桌子,后来指在桌子上写字的人。

GPD_TEE_SE_API_v1.0

GPD_TEE_SE_API_v1.0
GlobalPlatform Device Technology
TEE Secure Element API
Version 1.0 Public Release
July 2013 Document Reference: GPD_SPE_024
Copyright 2012-2013 GlobalPlatform, Inc. All Rights Reserved. Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights or other intellectual property rights of which they may be aware which might be necessarily infringed by the implementation of the specification or other work product set forth in this document, and to provide supporting documentation. The technology provided or described herein is subject to updates, revisions, and extensions by GlobalPlatform. Use of this information is governed by the GlobalPlatform license agreement and any use inconsistent with that agreement is strictly prohibited.

Disposal Application

Disposal Application

总经理
MIS部长
2.额外费用(如果存在)

3.处理原因说明 1.部分损坏,无法使用。
ห้องสมุดไป่ตู้
备注: *1.处理价格最少需要两家以上报价比较; *2.如果申请处理的是电脑或相关IT设备,需要MIS部部长批准; *3.差额(②-①)为“+”,代表公司盈利,差额(②-①)为“-”,代表公司损失,
申请人
管理本部
人事总务部 部长 本部长
<Version 2010>
资产/物品处理申请表
Application of Disposal Assets/Article 申请人: 处理内容: 1.处理物品详情
物品名称 资产编号 购入日期 购买价格
部门: 固定资产 危险废弃物
日期: 其他 固定资产类
① 折旧后价值 ② 处理价格 ②-① 差额 处理后 盈利 处理后 损失
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档