首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

托管代码(特别是.NET)是否会变得"非托管"?

托管代码是指在执行过程中,其执行环境由运行时环境(如.NET运行时环境)管理和控制的代码。而非托管代码则是指在执行过程中,其执行环境不由运行时环境管理和控制的代码。因此,托管代码不会变成非托管代码。

在.NET框架中,托管代码主要由公共语言运行时(CLR)管理和执行。CLR提供了一个运行时环境,可以自动内存管理、垃圾回收、类型安全和安全性检查等功能。因此,在.NET框架中编写的代码都是托管代码,不会变成非托管代码。

总之,托管代码不会变成非托管代码,因为它们是由不同的运行时环境管理和执行的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#托管代码托管代码

含义 托管/托管是微软的.net framework中特有的概念。 托管代码:也叫本地(native)代码托管代码:是由公共语言运行库(CLR)执行的代码,而不是由操作系统直接执行。...本地代码经过两次编译,第一次将源代码编译成中间代码(MSIL,MicrosoftIntermediate Language),第二次由.net中的CLR将中间代码编译成机器代码。...程序实际上是被“托管”在公共语言运行库中。随着程序集的运行,公共语言运行库持续地提供各种服 务,例如内存管理、安全管理、线程管理等等。和托管资源/托管资源不同,不要弄混。...有关内存管理(内存申请,内存释放,垃圾回收之类的)全部都是.net的CLR来管理 2.更加安全,不会出现诸如内存泄露之类的问题 托管代码的缺点 1.对程序的性能也产生一定的影响。...CLR首次加载程序集代码时,JIT将IL编译成本地代码时,会对其进行代码优化,这类似与托管C++编译器的后端所做的事情.这可能也花费加多的时间生成优化代码。 2.不能直接读取内存,不够灵活

3.5K30
  • 六、CLR下的托管代码应用程序与托管代码程序之间的性能对比

    确实影响性能,也确实会分配动态内存....但是,在微软做了大量的性能优化工作之后,将这些额外的开销保持在最低的限度之内. 2、托管程序的实际性能 事实上,托管程序的性能实际上要比托管应用程序要好,举个例子,当JIT编译器在运行时将IL代码编译器编译成本机代码的时候...,编译器对执行环境的认识比托管编译器更深刻。...如果JIT编译器没有使托管应用程序达到应有的效果,如果需要进一步确认,有两种方法: (1)、.Net Framework SDK提供的NGen.exe工具 该工具将程序集的所有的IL代码编译成本机代码,...并将这些本机代码保存到一个磁盘文件中,在运行时加载程序集时,CLR自动判断是否存在该程序集的预编译版本。

    89440

    .NET简谈互操作(四:基础知识之Dispose托管内存)

    2.托管内存与托管内存是否存在差异?....NET托管平台上的对象与托管的对象之间是否能直接互换?...;如果托管内存是用COM的CoTaskMemAlloc分配的那么.NET的封送拆收器自动的释放掉那块内存;如果是非托管内存是采用C的或者C++或者其他的什么方式分配的.NET根本不知道你是怎么分配的...托管的内存释放只有托管知道,所以在托管中定义一个释放托管资源的方法,然后在用.NET平台去调用这个托管方法来进行释放内存;下面我们来看一个小例子,以说明问题为主; 图1: 这是非托管代码,...由于时间关系我就没有写具体的操作了;说明原理就行了; 图2: 这是在托管.NET平台上面定义的托管代码调用关系; 图3: 这样一来,不管托管的内存是采用什么方法分配的内存我们都能在托管中将其释放

    48220

    C# 如何在项目引用x86 x64的托管代码

    因为现在的项目使用的是 AnyCpu 在 x86 的设备使用的是x86,在x64使用的是x64,但是对于托管代码,必须要在x64使用x64的dll,在x86使用x86的dll。...本文告诉大家如何在代码引用不同的dll。...,编译多个版本可以点击配置管理器,然后创建x86和x64,然后版本添加宏,这样就可以判断宏来使用不同的dll 点击活动解决方案平台,然后点击新建 选择项目属性,点击生成,就可以添加不同的宏 于是在后台代码可以这样写...先创建一个类用来存在辅助的方法,请看代码 [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]...var n = hfwzsnHzhpbbzbn(1, 2); 遇过遇到了 LoadLibrary 返回的 ptr 是 0 那么需要调用下面代码 var ptr = LoadLibrary("

    71420

    C# 如何在项目引用x86 x64的托管代码

    因为现在的项目使用的是 AnyCpu 在 x86 的设备使用的是x86,在x64使用的是x64,但是对于托管代码,必须要在x64使用x64的dll,在x86使用x86的dll。...本文告诉大家如何在代码引用不同的dll。 使用宏 最简单的方法是编译两个版本,编译多个版本可以点击配置管理器,然后创建x86和x64,然后版本添加宏,这样就可以判断宏来使用不同的dll ?...于是在后台代码可以这样写 ?...先创建一个类用来存在辅助的方法,请看代码 [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]...var n = hfwzsnHzhpbbzbn(1, 2); 遇过遇到了 LoadLibrary 返回的 ptr 是 0 那么需要调用下面代码 var ptr = LoadLibrary("

    2.1K10

    正尝试在 OS 载入程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内执行托管代码,这样做导致应用程序挂起。「建议收藏」

    出错提示: 正尝试在 OS 载入程序锁内执行托管代码。 不要尝试在 DllMain 或映像初始化函数内执行托管代码,这样做导致应用程序挂起。...原因分析: .NET2.0中添加了42种非常强大的调试助手(MDA。Loaderlock 是当中之中的一个。Loaderlock检測在一个拥有操作系统loader lock的线程上执行托管代码的情况。...解决方式二: 1、在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework以下添加一个String,值为”0″ 2、只是这样做,在该计算机上全部基于.NET2.0...开发都得不到MDA的优点 參考文章: http://blog.csdn.net/kissqi/article/details/4872316 发布者:全栈程序员栈长,转载请注明出处:https

    2.6K21

    GC的前世与今生

    Pinned objects指分配之后不能移动位置的对象,例如传递给托管代码的对象(或者使用了fixed关键字),GC在指针修复时无法修改托管代码中的引用指针,因此将这些对象移动将发生异常。...pinned objects导致heap出现碎片,但大部分情况来说传给托管代码的对象应当在GC时能够被回收掉。....NET的GC机制有这样两个问题:   首先,GC并不是能释放所有的资源。它不能自动释放托管资源。   第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。   ...托管托管代码都能被释放 // 如果disposing 等于false, 方法已经被终结器 finalizer 从内部调用过, //你就不能在引用其他对象,只有托管资源可以被释放。...2、循环引用,网状结构等的实现变得简单。GC的标志-压缩算法能有效的检测这些关系,并将不再被引用的网状结构整体删除。

    61230

    C#垃圾回收机制(GC)

    COM+的内存管理机制,引用计数器为0时这些对象才可能成为被回收对象 Pinnedobjects指分配之后不能移动位置的对象,例如传递给托管代码的对象(或者使用了fixed关键字),GC在指针修复时无法修改托管代码中的引用指针...pinnedobjects导致heap出现碎片,但大部分情况来说传给托管代码的对象应当在GC时能够被回收掉 二、 Generational 分代算法 程序可能使用几百M、几G的内存,对这样的内存区域进行....NET的GC机制有这样两个问题: 首先,GC并不是能释放所有的资源。它不能自动释放托管资源。 第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。...托管托管代码都能被释放 // 如果disposing 等于false, 方法已经被终结器 finalizer 从内部调用过, //你就不能在引用其他对象,只有托管资源可以被释放。...GC注意事项: 1、只管理内存,托管资源,如文件句柄,GDI资源,数据库连接等还需要用户去管理 2、循环引用,网状结构等的实现变得简单。

    78210

    .NET面试题解析(06)-GC与内存管理

    11. .NET中的托管堆中是否可能出现内存泄露的现象? 12. 在托管堆上创建新对象有哪几种常见方式?  ...托管资源回收 .NET中提供释放托管资源的方式主要是:Finalize() 和 Dispose()。...她的作用就是用来释放托管资源,由GC来执行回收,因此可以保证托管资源可以被释放。...Finalize() 和 Dispose()都是.NET中提供释放托管资源的方式,他们的主要区别在于执行者和执行时间不同: finalize由垃圾回收器调用;dispose由对象调用。...Dispose一调用便释放托管资源; Finalize不能保证立即释放托管资源,Finalizer被执行的时间是在对象不再被引用后的某个不确定的时间; 11. .NET中的托管堆中是否可能出现内存泄露的现象

    56310

    .NET面试题解析(06)-GC与内存管理

    11. .NET中的托管堆中是否可能出现内存泄露的现象? 12. 在托管堆上创建新对象有哪几种常见方式?  ...托管资源回收 .NET中提供释放托管资源的方式主要是:Finalize() 和 Dispose()。...她的作用就是用来释放托管资源,由GC来执行回收,因此可以保证托管资源可以被释放。...Finalize() 和 Dispose()都是.NET中提供释放托管资源的方式,他们的主要区别在于执行者和执行时间不同: finalize由垃圾回收器调用;dispose由对象调用。...Dispose一调用便释放托管资源; Finalize不能保证立即释放托管资源,Finalizer被执行的时间是在对象不再被引用后的某个不确定的时间; 11. .NET中的托管堆中是否可能出现内存泄露的现象

    63320

    C#-垃圾回收机制(GC)

    Pinned objects指分配之后不能移动位置的对象,例如传递给托管代码的对象(或者使用了fixed关键字),GC在指针修复时无法修改托管代码中的引用指针,因此将这些对象移动将发生异常。...pinned objects导致heap出现碎片,但大部分情况来说传给托管代码的对象应当在GC时能够被回收掉。....NET的GC机制有这样两个问题: GC并不是能释放所有的资源。它不能自动释放托管资源。 GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。...托管托管代码都能被释放 // 如果disposing 等于false, 方法已经被终结器 finalizer 从内部调用过, //你就不能在引用其他对象,只有托管资源可以被释放。...Components.Dispose(); } // 释放托管资源,如果disposing为 false, // 只会执行下面的代码.

    1.4K30

    托管C++、C++CLI、CLR

    (2) 使用托管可以从任何一个.NET框架兼容语言中调用一个C++组件,也可调用托管DLL、其它库以及类等。   (3) 可以直接从托管代码中访问.NET框架。   ...但是太大的变革往往带来兼容性问题,特别是新版本的VB宣称其只能开发托管的应用程序(也就是.NET应用程序),所以对开发人员来讲,这肯定意味着过去使用VB编写的代码在新版本VB上进行重新构造的难度很大...与C#和Visual Basic .NET相比,其主要优点是旧代码可以比较快地移植到新的平台上,而且即使不完全重写代码,也可以通过互操作在同一个模块中无缝整合托管托管代码,从新的.Net框架中获益。...目前只有托管C++及其后继者C++/CLI可以做到无缝整合托管托管代码,而在托管代码中调用COM的速度又相当慢,所以经常被用于其他语言和托管代码之间的桥梁。   ...,传统托管代码仍然是一些人的首选。

    2.8K40

    CLR和.Net对象生存周期

    特别是在当前CoreCLR学习资料比较少的情况下,开发人员把.Net Framework实现的CLR搞搞懂也就差不多了。...那托管模块是标准的32位或64位Microsoft Windows可移植执行体文件,主要由以下几部分组成 PE32或PE32+ CLR头 元数据 IL代码(基于栈,也称为托管代码) 什么是托管代码托管代码...托管代码:在公共语言运行库环境的外部,由操作系统直接执行的代码托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。...结合托管堆,.Net已经为开发人员提供了一个很简便的编程模型:分配并初始化内存直接使用。大多数类型并不需要我们进行资源清理,GC自动释放内存。...当CLR在托管堆上为垃圾对象分配地址空间时,总是分配出新的地址空间,且呈连续分配。

    1.1K50

    CLR和.Net对象生存周期

    特别是在当前CoreCLR学习资料比较少的情况下,开发人员把.Net Framework实现的CLR搞搞懂也就差不多了。...那托管模块是标准的32位或64位Microsoft Windows可移植执行体文件,主要由以下几部分组成 PE32或PE32+ CLR头 元数据 IL代码(基于栈,也称为托管代码) 什么是托管代码托管代码...托管代码:在公共语言运行库环境的外部,由操作系统直接执行的代码托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。...结合托管堆,.Net已经为开发人员提供了一个很简便的编程模型:分配并初始化内存直接使用。大多数类型并不需要我们进行资源清理,GC自动释放内存。...当CLR在托管堆上为垃圾对象分配地址空间时,总是分配出新的地址空间,且呈连续分配。

    81960

    C# 客户端内存优化分析

    背景概述 C# 开发客户端系统的时候,.net 框架本身就比较消耗内存资源,特别是xp 这种老爷机内存配置不是很高的电脑上运行,所以就需要进行内存上的优化,才能流畅的在哪些低端电脑上运行.....NET的GC机制有这样两个问题: - 首先,GC并不是能释放所有的资源。它不能自动释放托管资源。 - 第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。...托管资源和托管资源 上面介绍到,GC只释放托管资源,那么什么是托管资源和托管资源。 - 托管资源 :托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源。...- 托管资源:托管资源指的是.NET不知道如何回收的资源,最常见的一类托管资源是包装操作系统资源的对象,例如文件,窗口,网络连接,数据库连接,画刷,图标 等。...默认情况下,方法是空的,对于托管对象,需要在此方法中编写回收托管资源的代码,以便垃圾回收器正确回收资源。

    1.2K20

    C# 托管资源与托管资源

    托管资源: Net平台中,CLR为程序员提供了一种很好的内存管理机制,使得程序员在编写代码时不要显式的去释放自己使用的内存资源(这些在先前C和C++中是需要程序员自己去显式的释放的)。...而且在析构函数中包含大量的释放资源代码降低垃圾回收器的工作效率,影响性能。所以对于包含托管资源的对象,最好及时的调用Dispose()方法来回收资源,而不是依赖垃圾回收器。...在.NET中,Object.Finalize()方法是无法重载的,编译器是根据类的析构函数来自动生成Object.Finalize()方法的,所以对于包含托管资源的类,可以将释放托管资源的代码放在析构函数...而且在析构函数中包含大量的释放资源代码降低垃圾回收器的工作效率,影响性能。所以对于包含托管资源的对象,最好及时的调用Dispose()方法来回收资源,而不是依赖垃圾回收器。...上面就是.NET中对包含托管资源的类的资源释放机制,只要按照上面要求的步骤编写代码,类就属于资源安全的类。

    3.2K10

    【深入浅出C#】章节10: 最佳实践和性能优化:内存管理和资源释放

    垃圾对象: 在运行程序时,创建许多对象和数据结构,其中某些对象会在一段时间后变得不再可达(即程序无法访问它们)。...内存泄漏的危害包括: 性能问题: 内存泄漏导致程序占用越来越多的内存,最终导致性能下降。内存资源的不断积累可能导致程序变得缓慢和不稳定。 资源耗尽: 内存泄漏导致系统资源(如物理内存)耗尽。...垃圾回收自动处理托管资源的释放,当托管对象不再被引用时,它们将被回收。 托管资源: 这些资源是由托管代码以外的实体管理的资源,例如文件句柄、数据库连接、网络连接、COM对象等。....NET Memory Profiler: 用于检测和解决.NET应用程序中的内存泄漏和性能问题的专用工具。它可以帮助你分析托管堆上的对象分配和释放情况。...代码剖析: 使用代码剖析工具来测量函数执行时间,找出哪些函数占用了大量的 CPU 时间,以便进行优化。 内存分析: 使用内存分析工具来检测内存泄漏和资源管理问题,特别是托管代码中。

    1.2K40
    领券