资源简介
=1,2
垃圾回收算法:
托管堆:CLR要求的资源从托管堆分配,任何对象只要没有应用程序的根引用它,都会在某个时刻被垃圾回收器回收
基于代的机制,提高回收的性能,在程序的生命期中,新建的对象是新一代,而创建的比较早的对象是老一代,第0代是最近分配的对象,CLR 使用了0,1,2三代进行管理
=3 GC和调试
GcAndDebug.cs
=4本地资源
终结(finalization)是CLR提供的一种机制,允许对象在垃圾回收器回收其内存之前执行一些得体的清理工作,任何包装了本地资源的类型都必须支持终结操作(实现一个命名为Finalize的方法)。
GC判断一个对象是垃圾时,会调用对象的Finalize(实现的情况下),C#中使用~ClassName表示Finalize
In most cases, you do not need to write classes that derive from the CriticalFinalizerObject class. The .NET Framework class library provides two classes, SafeHandle and CriticalHandle, that provide critical finalization functionality for handle resources. Furthermore, the .NET Framework provides a set of prewritten classes derived from the SafeHandle class, and this set is located in the Microsoft.Win32.SafeHandles namespace. These classes are designed to provide common functionality for supporting file and operating system handles.
System.Runtime.ConstrainedExecution 下的 CriticalFinalizerObject 抽象对象,CLR特殊对待
System.Runtime.InteropServices下的派生抽象类
SafeHandle
CriticalHandle 和SafeHandle只是引用计数的区别
Microsoft.Win32.SafeHandles
SafeFileHandle,SafeRegistryHandle ,SafeWaitHandle...
SafeProcessHandle SafeLibraryHandle SafeLocalMemHandle SafeThreadHandle等MSDN没有编写,但同样是处理这个问题的
类似的实现的不同类代表不同的资源类型,这么多的类似,主要是为了类型安全
SafeHandle的作用:
1、以前的IntPtr形式不够健壮,如在IntPtr赋值前可能抛出ThreadAbortException异常,这样托管代码将造成本地资源的泄露
2、防止利用潜在的安全漏洞,一个线程访问一个本地资源,另一个线程释放该资源,通过引用计数实现
对托管资源只有在极少数情况下才使用终结器
终结器被调用的时刻:
1、第0代满:
2、显式调用GC.Collect
3、Windows报告内存不足
4、CLR卸载AppDomain
5、CLR关闭
内部实现使用终结列表保留对象,通过这个GC进行处理, freachable队列
=Dispose
终结器的调用时间由GC确定,调用者无法显式调用它
Dispose提供了显式清理资源的能力
GCHandle WeakReference
System.Runtime.CompilerServices.ConditionalWeakTable<TKey,TValue>
加入时的是对象的WeakReference,因此可能会回收,但可以确保只要key存在,value也是存在的
任何大于85000字节的对象被自动认为是大对象,大对象在大对象堆中分配
==
大量资源
GC
public static void AddMemoryPressure(Int64 bytesAllocated);
public static void RemoveMemoryPressure(Int64 bytesAllocated);
提示GC实际需要消耗的内存,然后GC监视内存压力,压力变大时,强制回收
System.Runtime.InteropServices HandleCollector 数量有限的本地资源
MemoryFailPoint在需要大量内存前可以先检查是否可以使用这么大的内存
GC的监视
代码形式:
GC.GetTotalMemory
GC.CollectionCount
PerMon.exe系统性能监视工具
CLR Profiler工具
FUSLOGVW.exe
clrver.exe
SvcTraceViewer.exe
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GCDemo
{
internal sealed class GenObj
{
~GenObj()
{
Console.WriteLine(“In Finalize method“);
}
}
class ControlGC
{
public void Demo()
{
Console.WriteLine(“Maximum generations: “ + GC.MaxGeneration);
// Create a new GenObj in the heap.
object o = new GenObj();
// Because this object is newly created it is in generation 0.
Console.WriteLine(“Gen “ + GC.GetGeneration(o)); // 0
// Performing a garbage collection promotes the object‘s generation.
GC.Collect();
Console.WriteLine(“Gen “ + GC.GetGene
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1751 2011-04-28 13:31 GCDemo\ControlGC.cs
文件 443 2011-04-28 11:02 GCDemo\DisposeDemo.cs
文件 842 2011-04-28 09:12 GCDemo\GcAndDebug.cs
文件 2812 2011-04-28 13:33 GCDemo\GCDemo.csproj
文件 3172 2011-04-28 13:18 GCDemo\GCOthers.cs
文件 7600 2011-04-28 13:09 GCDemo\GCs.cs
文件 2279 2011-04-28 10:42 GCDemo\NativeResouce.cs
文件 947 2011-04-28 13:33 GCDemo\Program.cs
文件 1442 2011-04-28 08:54 GCDemo\Properties\AssemblyInfo.cs
文件 3594 2011-04-28 15:00 GCDemo\Readme.txt
文件 860 2011-04-28 08:55 GCDemo.sln
目录 0 2011-05-13 22:10 GCDemo\Properties
目录 0 2011-05-13 22:10 GCDemo
----------- --------- ---------- ----- ----
25742 13
相关资源
- 计算机图形学 三维模型处理算法初步
- 基于遗传算法的排程系统
- C#生成不规则三角网算法参考,适合学
- 图像加密算法与实践:基于C#语言实现
- 找零钱算法源代码
- 新闻个性化推荐算法训练集数据
- C#Krc歌词解码源码
- 八皇后&&N皇后算法设计与分析C#界面简
- c#实现K均值聚类算法,使用mysql数据库
- 决策树算法;ID3;C#源码实现
- 纠偏算法适用于谷歌腾讯微软高德
- C# 图像处理、神经网络、遗传算法集
- C#tsp遗传算法
- 非常好用的遗传算法 C#程序 源码 遗传
- C#实现磁盘调度的四种算法,图形化界
- 根据经纬度计算日出日落时间算法实
- c#下的多种字符串加密解密算法
- 模糊均值聚类算法FCM(C#)
- KNN算法C#实现
- VIPS算法源代码
- 用遗传算法/模拟退火算法 求解旅行商
- C#遗传算法常用7种遗传算法源码
- winform版五子棋源程序
- c#实现D8单流向算法
- 最小二乘法圆拟合算法C#实现
- 运筹学单纯型算法C#程序实现
- 使用C#实现的遗传算法
- 基于RSA算法的数字签名系统 C#实现
- C#银行家算法界面
- 蚁群算法演示程序
评论
共有 条评论