被遗忘的UnSafe?

Joe-xXx 2010-02-21 05:24:52
今天用C#写了一段Unsafe Code,主要是对bitmap的bitdata进行操作。通过与利用win32API进行同样操作的代码进行效率,发现其速度已相当接近。但曾经有人提示过:不要频繁使用UnSafe Code。出于这个考虑,Google了一下,得到了一个答案:禁用公共运行时(CLR)的代码验证功能,这个真是一头雾水!!请各位指教下。
还有就是如果频繁使用或程序中大量调用Unsafe Code,会有什么后果或后遗症?
...全文
181 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joe-xXx 2010-02-23
  • 打赏
  • 举报
回复
哦~~在dotnet下,数组越界也是在实际的运行过程中才会抛出,关闭了代码验证,就是发生缓冲区溢出错误或其他错误?!
blue_apple2006 2010-02-23
  • 打赏
  • 举报
回复
CLR本身有很多验证,比如数组越界之类的。
如果定义为unsafe,则会想C语言一样,没有越界验证。越界了也可以继续运行,造成缓冲区溢出等错误。
Joe-xXx 2010-02-22
  • 打赏
  • 举报
回复
公共运行时(CLR)的代码验证功能,来个高手详解下吧~~求教求教
Joe-xXx 2010-02-21
  • 打赏
  • 举报
回复
先谢谢各位,6楼解释得蛮好的啊~能详细解释下:公共运行时(CLR)的代码验证功能!
tkscascor 2010-02-21
  • 打赏
  • 举报
回复
操作得当的话, 效率会提升很高。
所谓的不安全代码。 就是CLR编译的,不负责这段代码的安全。。 比如内存释放什么的。
就好像你给我一段代码, 我给你编译,
如果是正常C#代码, 在编译的时候我会验证代码是否正确,内存回收什么的,
如果指明unsafe, 说明我在编译的时候不负责对它的编译,不验证他的内存回收。 并不是代码不安全, 而是。net 不能保证代码是安全的。 这样解释,是否理解。。。
PandaIT 2010-02-21
  • 打赏
  • 举报
回复
不推荐使用!!如果代码回到1010时代会是什么样子??
Justin-Liu 2010-02-21
  • 打赏
  • 举报
回复
指针在c#中是不提倡使用的,有关指针的操作被认为是不安全的(unsafe)。
Joe-xXx 2010-02-21
  • 打赏
  • 举报
回复
想知道为什么不安全啊?主要是怕c/c++的野指针之类的
段传涛 2010-02-21
  • 打赏
  • 举报
回复
指针在c#中是不提倡使用的,有关指针的操作被认为是不安全的(unsafe)。
用的时候要做修改
在右侧的solution Explorer中找到你的项目,在项目图标(绿色)上点右键,选最后一项properties,然后在Build标签页里把Allow unsafe code勾选上。
bwangel 2010-02-21
  • 打赏
  • 举报
回复
依你要实现的功能,似乎并不需要unsafe, unsafe主要是指指针操作.

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧