公司网站制作企业,做海外网站交税吗,国外做蒸汽锅炉的网站,重庆妇科排名前十的医院其实整个.NET项目都是运行在.NET Framework上的托管代码#xff0c;这个道理和JAVA虚拟机的机制是类似的。 最简单的说呢#xff0c;受托管的代码不能直接写内存#xff0c;是安全的#xff0c;而非托管代码是非安全代码#xff0c;可以使用指针操作内存。 一般的项目使… 其实整个.NET项目都是运行在.NET Framework上的托管代码这个道理和JAVA虚拟机的机制是类似的。 最简单的说呢受托管的代码不能直接写内存是安全的而非托管代码是非安全代码可以使用指针操作内存。 一般的项目使用托管代码都行了也就是说在程序里面不需要用到非安全代码。 对于一些对速度要求高的部分功能可以考虑使用非安全代码使用指针等读写内存而对于真个项目来说还是受托管的安全代码。 有关非安全代码的信息请查阅MSDN unsafe。 在string方法中如ToUpper等字符串操作方法都会产生一个新的字符串这样增大了运行开支。一个替代方案是通过非托管代码直接操作字符串。如替代ToUpper方法 using System; public class Test { public static void Main(string[] args) { string str hello; ToUpper(str); Console.WriteLine(str); } private static unsafe void ToUpper(string str) { fixed(char * pfixed str) for(char * ppfixed;*p!0;p) { *p char.ToUpper(*p); } } } fixed语句 格式fixed ( type* ptr expr ) statement 它的目的是防止变量被垃圾回收器生定位。 其中 type为非托管类型或void ptr为指针名 expr为可以隐式转换为type*的表达式 statement为可执行的语句或块 fixed语句只能在unsafe的上下文中使用fixed 语句设置指向托管变量的指针并在 statement 执行期间“锁定”该变量。如果没有 fixed 语句则指向托管变量的指针将作用很小因为垃圾回收可能不可预知地重定位变量。 执行完 statement 后任何锁定的变量都被取消锁定并受垃圾回收的制约。因此不要指向 fixed 语句之外的那些变量。在不安全模式中可以在堆栈上分配内存。堆栈不受垃圾回收的制约因此不需要被锁定。 但在编译时因为使用了非托管代码必须要使用/unsafe才能通过。 简单来说托管的代码就是把有关内存管理内存申请内存释放垃圾回收之类的全部都是.net的CLR来管理就是说使用托管的代码把底层的一些操作都封装起来了不能直接进行内存的读取之类的和硬件相关的操作优点就是比较安全不会出现诸如内存泄露之类的问题缺点也很明显不能直接读取内存性能上会有损失使用起来有时也不够灵活。 非托管的刚好相反可以直接进行硬件操作性能比较高但是对开发人员的要求也比较高。 最直观的就是c#不推荐使用指针而c就可以使用指针来直接读取内存 c#使用垃圾回收c要手动的释放对象…… 转载于:https://www.cnblogs.com/cjlol/archive/2010/04/02/1703456.html