Tag: 修复

C#不安全代码固定指针作为参数传递

我在msdn上遇到了以下代码: unsafe static void SquarePtrParam (int* p) { *p *= *p; } unsafe static void Main() { Point pt = new Point(); pt.x = 5; pt.y = 6; // Pin pt in place: fixed (int* p = &pt.x) { SquarePtrParam (p); } // pt now unpinned. Console.WriteLine (“{0} {1}”, pt.x, pt.y); } 我只是想知道,我们是直接访问SquarePtrParam函数中的指针,它是否inheritance了从调用方法修复数组的信息? 为什么我们不需要在SquarePtrParam中将其显式设置为本地SquarePtrParam 。 […]

在包含固定数组的托管不安全结构上,C#fixed语句的开销是多少?

我一直试图确定在C#中使用固定语句的真正成本是什么,用于包含固定数组的托管不安全结构。 请注意我不是指非托管结构。 具体来说,有没有理由避免下面的’MultipleFixed’类显示的模式? 简单地修复数据的成本是否为非零,接近零(= =成本类似于在进入/退出固定范围时设置和清除单个标志),或者它是否足够重要以尽可能避免? 显然,这些课程是为了帮助解释这个问题而设计的。 这是针对XNA游戏中的高使用率数据结构,其中此数据的读/写性能至关重要,因此如果我需要修复数组并将其传递到任何地方,我会这样做,但如果没有任何差别我我更喜欢将fixed()本地保留在方法中,以帮助保持函数签名对于不支持不安全代码的平台更加轻松。 (是的,它的一些额外的咕噜声代码,但不管它需要……) 不安全的结构ByteArray { 公共固定字节数据[1024]; } class MultipleFixed { unsafe void SetValue(ref ByteArray bytes,int index,byte value) { fixed(byte * data = bytes.Data) { data [index] = value; } } unsafe bool Validate(ref ByteArray bytes,int index,byte expectedValue) { fixed(byte * data = bytes.Data) { return data [index] == expectedValue; } […]