c# - 如何区分 C# 中的托管和非托管代码
问题描述
根据 MSDN,
Managed Code - Code that could be understood and managed by CLR
Unmanaged Code - Code that could not handled by CLR
但我想知道如何确定哪个资源或类符合 CLR 以及哪个不符合。
我提到了下面的链接
- C# 托管非托管代码
我们如何区分 C# 中的托管和非托管资源?TextFieldParser 是非托管的吗?
public class Customer { //What makes this CLR compliant } public class DbConnectionHandler: IDisposable { //Database Connection & other related stuff //What makes this CLR Non-Compliant }
如果我使用的是 EF(LINQ to Entities),它会被翻译成原生 SQL。那么所有 LINQ 都属于非托管代码类别吗?
谢谢!
解决方案
这里的“非托管”是指非 CLR 代码的进程内执行(不要将其与“CLR 兼容”混淆,无论这意味着什么);所以 - EF 和 LINQ 是托管的(或主要是托管的),但它们经常在某些时候间接与非托管dll 对话(想想:C/C++ dll 等 - 与 CLR 无关) - 例如,许多 ADO。 NET 提供程序实际上是非托管数据库驱动程序的 P/Invoke 层 - 或与本地进程中手动分配的原始内存(例如,unsafe
通过 分配的一块内存)进行对话的代码。Marshal.AllocHGlobal
通常它们以双重状态存在:有一个托管层抽象并隐藏了非托管层 - 因此应用程序级代码很少直接与非托管代码对话。
涉及本机 SQL 的事实是不相关的,因为它不是“托管的”或“非托管的”——它不是在进程中的,所以它完全是一个不同的类别。
推荐阅读
- python - 如何将'conans' python 包安装到系统中?
- react-native - React Native expo-cli 找不到模块 expo.js
- javascript - 如何跟踪单个 JavaScript 进程?
- reactjs - React 组件在“状态或道具变化”或“每个状态变化”上重新渲染,混淆官方文档
- r - 具有未知数量和变量名称的数据集上的多个 QQ 图
- javascript - 从现有的 js 对象创建另一个不同格式的 js 对象
- asp.net-core - Blazor 服务器端和 Web 程序集中 HttpClient 的不同机制
- regex - .htaccess 传递参数并删除页面名称
- logging - 我正在 python 中创建一个新的日志级别,但我收到错误“无法正确记录以下消息:”
- netsuite - Suitelet 上的提交按钮和客户端脚本按钮冲突。不锈钢 2.0