根据MSDN,
Managed Code - Code that could be understood and managed by CLR
Unmanaged Code - Code that could not handled by CLR
但是我想知道如何确定哪个资源或类符合CLR以及哪个不符合。
我在下面提到了链接
How do we distinguish between managed and unmanaged resources in C#? Is TextFieldParser unmanaged?
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都属于“非托管代码”类别吗?
谢谢!
答案 0 :(得分:4)
此处的“非托管”是指非CLR代码的进程内执行(无论将其与“符合CLR的代码”混为一谈,这可能意味着什么);因此-EF和LINQ是受管理的(或大部分受管理的),但是它们有时经常与不受管理的 dll(例如:C / C ++ dll等,与CLR无关)进行间接对话-对于例如,许多ADO.NET提供程序实际上是非托管数据库驱动程序的P / Invoke层-或unsafe
代码,它们与本地进程中手动分配的原始内存进行通信(例如,通过Marshal.AllocHGlobal
分配的内存)。通常,它们以双重状态存在:有一个 managed 层来抽象并隐藏 unmanaged 层-因此应用程序级代码很少会直接与非托管代码对话。
涉及本机SQL的事实是无关的,因为它不是“托管的” 或“非托管的”-它不是进程内的,因此完全是另一类。 / p>