相关疑难解决方法(0)

C#不安全/固定代码

有人能举例说明在C#代码中实际使用"不安全"和"修复"的好时机吗?我以前玩过它,但从来没有真正找到它的好用.

考虑这段代码......

fixed (byte* pSrc = src, pDst = dst) {
    //Code that copies the bytes in a loop
}
Run Code Online (Sandbox Code Playgroud)

与简单使用...相比

Array.Copy(source, target, source.Length);
Run Code Online (Sandbox Code Playgroud)

第二个是.NET Framework中的代码,第一部分是从Microsoft网站复制的代码,http://msdn.microsoft.com/en-us/library/28k1s2k6(VS.80).aspx.

内置的Array.Copy()比使用Unsafe代码要快得多.这可能只是因为第二个只是更好的编写,第一个只是一个例子,但你真的甚至需要使用不安全/固定代码的什么样的情况?或者,这个可怜的网络开发人员是否在弄乱他的头脑?

.net c# unsafe fixed

31
推荐指数
3
解决办法
2万
查看次数

C#中的不安全代码

在C#中,不安全代码有哪些限制?例如,我可以像使用C或C++一样进行几乎任意的指针转换和算术运算吗?

c# unsafe

13
推荐指数
1
解决办法
2649
查看次数

C#中的固定语句

在我们的一个项目中,我们有类似的代码.任何人都可以解释(简单英语)为什么需要修复语句?

class TestClass
{
    int iMyVariable;
    static void Main()
    {
        TestClass oTestClass = new TestClass();
        unsafe
        {
            fixed (int* p = &oTestClasst.iMyVariable)
            {
                *p = 9;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# garbage-collection memory-management unsafe

12
推荐指数
3
解决办法
3225
查看次数

C#将变量复制到缓冲区而不创建垃圾?

是否可以在C#.Net(3.5及更高版本)中将变量复制到byte []缓冲区而不在进程中创建任何垃圾?

例如:

int variableToCopy = 9861;

byte[] buffer = new byte[1024];
byte[] bytes = BitConverter.GetBytes(variableToCopy);
Buffer.BlockCopy(bytes, 0, buffer, 0, 4);

float anotherVariableToCopy = 6743897.6377f;
bytes = BitConverter.GetBytes(anotherVariableToCopy);
Buffer.BlockCopy(bytes, 0, buffer, 4, sizeof(float));

...
Run Code Online (Sandbox Code Playgroud)

创建byte []字节中间对象变为垃圾(假设ref不再持有)...

我想知道如果使用按位运算符,变量可以直接复制到缓冲区而不创建中间字节[]?

.net c# buffer

9
推荐指数
1
解决办法
2357
查看次数

嵌套的固定语句

按照C#参考fixed声明:

fixed语句阻止垃圾收集器重定位可移动变量.
...
执行语句中的代码后,将取消固定任何固定变量并进行垃圾回收.因此,不要指向固定语句之外的那些变量.

我的问题是,如果我们fixed对同一个变量有嵌套语句,那么我在这个页面上找不到的内容是什么?

var data = new byte[100];
unsafe
{
    fixed(byte* pData = data)
    {
        //pData points to the "pinned" variable
        fixed(byte* pData2 = data)
        {
            //pData points to the "pinned" variable
            //pData2 points to the "pinned" variable
        }
        //Does pData still point to the "pinned" variable?
    }
}  
Run Code Online (Sandbox Code Playgroud)

上面的代码当然只是为了说明.实际使用可以是递归函数.

c# garbage-collection unsafe

3
推荐指数
1
解决办法
267
查看次数