首页 > 其他分享 >.net中的托管与非托管

.net中的托管与非托管

时间:2023-02-02 13:12:59浏览次数:57  
标签:代码 托管 DLL 内存 与非 类型 net CLR

1. 概念

托管代码:由公共语言运行库环境(而不是直接由操作系统)执行的代码。 在这种情况下,相关的运行时称为公共语言运行时 (CLR), CLR 负责提取托管代码、将其编译成机器代码,然后执行它。 除此之外,运行时还提供多个重要服务,例如自动内存管理、安全检测、类型安全

  • 说明1:当前创建一个引用类型的时候,CLR会为该引用类型分配内存,当对象失去引用的时候,就会触发GC进行自动回收。CLR体改的GC机制,带来的好处就是内存安全
    所谓的内存安全就是程序只能访问已申请的内存,这样意味着不会存在野指针。

  • 说明2:类型安全是指,CLR将程序每一块申请的内存都与一拽类型相关联,并保证被标记了类型的内存,只能进行该类型允许的操作。

  • 说明3:自动内存管理是公共语言运行时在托管执行过程中提供的服务之一。 公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。

非托管代码:由操作系统直接执行的的代码称为非托管代码。如运行 C/C++ 程序,则运行的代码也称为“非托管代码”。

2. 特点

托管代码 享受CLR提供的服务,如垃圾回收,安全检测等。
非托管代码需要自行提供安全检测,垃圾回收等操作。

3. 区分

  • 非托管资源的类型实现了IDisposable接口,实现了Dispose方法。在代码中若是不需要非托管资源,需要显示的调用Dispose()方法释放资源。

    • 格式如下try{}catch(){}finally{xxx.Dispose();},一般使用其语法糖using(……){……}
  • 典型的非托管资源:

    • 文件,如FileStream
    • 窗口,如From
    • 网络连接,如Socket
    • 数据连接,如SqlConnection

4. C#调用托管DLL和非托管DLL

  • 托管DLL就是DotNet环境下生成的DLL,可以直接添加引用

  • 非托管DLL调用需要使用[DLLImport]

5. 参考

MSDN:什么是“托管代码”?

标签:代码,托管,DLL,内存,与非,类型,net,CLR
From: https://www.cnblogs.com/shanzhiming/p/17085675.html

相关文章

  • 苏州服务器托管优秀案例|苏州优质IDC机房租用推荐
       在新兴IT产业,还有另外一个数据中心服务器托管的使用案例:您是否考虑过为大数据分析以及高性能计算实施一套服务器托管?关于大数据主机托管设施供应商,IT必须注意的其......
  • kubernetes 污点(Taint)和容忍度(Toleration)研究
    1.文档官方文档https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/2.知识点2.1.什么污点和容忍度?污点(Taint)是应用在节点之上......
  • 阅读论文(一):ImageNet classification with deep convolutional neural networks
    Alexnet卷积神经网络模型重叠池化(overlappingpooling)传统不重叠的池化层,步长s与窗口尺寸z是相同的,s=z。而重叠池化步长s小于窗口尺寸z,s<z。局部响应归一化参考:ht......
  • 缩点 P2812 校园网络【[USACO]Network of Schools加强版】
    首先找出图中的强连通分量,用tarjan算法。强连通分量内部强联通,所以将其看成一个点是不影响的。进行缩点之后,整张图变成了一个有向无环图。首先对于每一条边进行检测,如果......
  • dapr入门与本地托管模式尝试
    1简介Dapr是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和......
  • Kubernetes(k8s)配置文件管理:ConfigMap
    目录一.系统环境二.前言三.ConfigMap概览四.创建ConfigMap五.ConfigMap的使用5.1以环境变量的方式使用ConfigMap5.2以卷的方式使用ConfigMap一.系统环境服务器版本......
  • 14-TTL与非门
    TTL与非门集成电路有两大类COMOS和TTL(三极管)电路结构工作原理多发射结的三极管,两个输入之间是与的关系输入低电平输入高电平A、B都是高电平倒置放大压差大的......
  • ASP.NET Core+Element+SQL Server开发校园图书管理系统(三)
    随着技术的进步,跨平台开发已经成为了标配,在此大背景下,ASP.NETCore也应运而生。本文主要基于ASP.NETCore+Element+SqlServer开发一个校园图书管理系统为例,简述基于MVC三......
  • 【gRPC】.NET 6 WPF gRPC client 无法找到命名空间生成项目失败
    基于.NET6的WPF项目作为gRPC客户端,生成项目时出错:1>D:\projects\aasp_pc_soft\AutonomicAnalysisSystemForPressurePellets\AutoAnalysisSystemClientTest\AutoAnalysis......
  • hrnet读取coco数据集
     train.py里make_dataloader读取数据集。train_loader=make_dataloader(cfg,is_train=True,distributed=args.distributed)datasetbuild.py中的39行dataset=e......