小编Eri*_*sky的帖子

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

我一直在尝试确定在C#中使用fixed语句对于包含固定数组的托管不安全结构的真正成本.请注意我不是指非托管结构.

具体来说,有没有理由避免下面的'MultipleFixed'类显示的模式?简单地修复数据的成本是非零,接近零(==成本类似于在进入/退出固定范围时设置和清除单个标志),还是足够重要以避免在可能的情况下?

显然,这些课程是为了帮助解释这个问题而设计的.这是针对XNA游戏中的高使用率数据结构,其中此数据的读/写性能至关重要,因此如果我需要修复数组并将其传递到任何地方,我会这样做,但如果没有任何差别我我更喜欢将fixed()本地保留在方法中,以帮助保持函数签名对于不支持不安全代码的平台更加轻松.(是的,它的一些额外的咕噜声代码,但不管它需要......)

 

    unsafe struct ByteArray
    {
       public fixed byte Data[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;
           }
        }

        void Test(ref ByteArray bytes)
        {
            SetValue(ref bytes, 0, 1);
            Validate(ref bytes, 0, 1);
        }
    }

    class SingleFixed
    {
       unsafe void SetValue(byte* data, int index, …

c# clr unsafe fixed

13
推荐指数
2
解决办法
5075
查看次数

如何在C#中避免或检测隐式委托推理?

我写使用C#游戏,发现许多情况下,其中一个功能需要一个委托,我在一个函数名,而不是创建和缓存的委托作为参数,而不是用在不经意间过去了.这会导致为每个对这些函数的调用创建一个委托对象,然后在函数返回时立即变为垃圾.

我想找到我犯了这个错误的所有地方,我宁愿避免阅读每个文件的每一行寻找它们(有多年的代码值).我看到VB有一个'选项严格'会禁用隐式构造的对象,如果C#有这个功能,我觉得这对我有用,但我认为不行.我还审查了编译器警告选项,它们似乎都没有帮助.

是否有任何合理方便的方法来识别由隐式委托推理创建的这些对象,以便我可以找到我需要创建/缓存回调以避免垃圾的位置?

c# delegates implicit garbage

6
推荐指数
1
解决办法
419
查看次数

标签 统计

c# ×2

clr ×1

delegates ×1

fixed ×1

garbage ×1

implicit ×1

unsafe ×1