受管制代码 托管代码

受管制代码    

    托管的代码就是把有关内存管理(内存申请,内存释放,垃圾回收之类的)全部都是.net的CLR来管理,就是说使用托管的代码把底层的一些操作都封装起来了,不能直接进行内存的读取之类的和硬件相关的操作,优点就是比较安全,不会出现诸如内存泄露之类的问题,缺点也很明显,不能直接读取内存,性能上会有损失,使用起来有时也不够灵活。
   非托管的刚好相反,可以直接进行硬件操作,性能比较高,但是对开发人员的要求也比较高。

https://www.cnblogs.com/qfb620/p/3607438.html

托管代码

托管代码(Managed Code)实际上就是中间语言(IL)代码。

代码编写完毕后进行编译,此时编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。

程序集(Assembly)的文件负责封装中间语言,程序集中包含了描述所创建的方法、类以及属性的所有元数据。

托管代码在公共语言运行库(CLR)中运行。这个运行库给运行代码提供了多种服务,通常来说,公共语言运行库可以加载和验证程序集,并以此来保证中间语言的正确性。

当某些方法被调用时,公共语言运行库把具体的方法编译成适合本地计算机运行的机器码,并且将编译好的机器码缓存起来,以备下次调用时使用。这个过程就是即时编译。 

注意:程序实际上是被“托管”在公共语言运行库中。随着程序集的运行,公共语言运行库会持续地提供各种服务,例如内存管理、安全管理、线程管理等等。

总结:

托管代码(Managed Code)是由公共语言运行库(CLR)执行的代码,而不是由操作系统直接执行。

托管代码也可以调用CLR的运行库服务和功能,比如GC、类型检查、安全支持等等。这些服务和功能提供独立与开发语言的、统一的Managed Code应用程序行为。

https://www.cnblogs.com/iamscree/articles/2363096.html

 

托管代码VS非托管代码 
托管代码 (managed code) :由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。 
Unmanaged Code - 非托管代码 :在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用C#编写AGV(自动导引车)交通管制代码来管理AGV的行动。以下是一个简单的示例: ```csharp using System; using System.Collections.Generic; namespace AGV_Traffic_Control { // AGV类 class AGV { public int ID { get; set; } public int CurrentPosition { get; set; } public bool IsMoving { get; set; } public AGV(int id, int position) { ID = id; CurrentPosition = position; IsMoving = false; } public void Move(int newPosition) { Console.WriteLine("AGV {0} is moving from {1} to {2}.", ID, CurrentPosition, newPosition); CurrentPosition = newPosition; } } // 交通管制类 class TrafficControl { private List<AGV> agvList; public TrafficControl() { agvList = new List<AGV>(); } public void AddAGV(AGV agv) { agvList.Add(agv); } public void MoveAGV(int agvID, int newPosition) { foreach (var agv in agvList) { if (agv.ID == agvID) { if (!agv.IsMoving) { agv.Move(newPosition); agv.IsMoving = true; } else { Console.WriteLine("AGV {0} is currently moving and cannot be controlled.", agvID); } return; } } Console.WriteLine("AGV {0} does not exist.", agvID); } } class Program { static void Main(string[] args) { TrafficControl trafficControl = new TrafficControl(); // 创建AGVs AGV agv1 = new AGV(1, 0); AGV agv2 = new AGV(2, 5); AGV agv3 = new AGV(3, 10); // 将AGVs添加到交通管制中 trafficControl.AddAGV(agv1); trafficControl.AddAGV(agv2); trafficControl.AddAGV(agv3); // 控制AGVs移动 trafficControl.MoveAGV(1, 3); // 移动AGV 1 到位置 3 trafficControl.MoveAGV(2, 8); // 移动AGV 2 到位置 8 trafficControl.MoveAGV(3, 15); // 移动AGV 3 到位置 15 } } } ``` 这个示例代码包含了一个`AGV`类和一个`TrafficControl`类。`AGV`类表示自动导引车,具有ID、当前位置和是否正在移动的属性,并且可以移动到新位置。`TrafficControl`类用于添加和控制多个AGV实例,它可以通过ID指定要移动的AGV以及目标位置。在Main方法中,我们创建了几个AGV并将它们添加到交通管制中,然后调用`MoveAGV`方法来控制它们的移动。这只是一个简单的示例,你可以根据实际需求进行相应的扩展和改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值