小编Vla*_*lad的帖子

我需要带ReaderWriterLockSlim的MemoryBarrier吗?

看起来单声道实现MemoryBarrierReaderWriterLockSlim方法内没有调用.因此,当我在a中进行任何更改时write lock,我可以在另一个使用a的线程中接收旧的缓存值read lock.

真的有可能吗?我应该MemoryBarrier在代码内部读取和写入锁定之前和之后插入?

c# multithreading asynchronous thread-safety

4
推荐指数
1
解决办法
327
查看次数

Euler <=> Quaternion之间的转换就像在Unity3d引擎中一样

我已经使用了两个例子(也来自这个网站),但结果与Unity说的结果不一样.

Quaternion.Euler和.eulerAngles是Unity函数.FromQ不执行奇点检查,FromQ2确实如此.

结果:

eulers = (100,55,-11):
Quaternion.Euler(eulers) == (0.6, 0.4, -0.4, 0.5)
ToQ(eulers)); == (0.5, -0.4, 0.2, 0.7) // 0.5, -0.4 right but in wrong order

FromQ(ToQ(eulers)) == (55.0, 100.0, -11.0)
FromQ2(ToQ(eulers)) == (-55.5, -6.3, 71.0) // something right

Quaternion.Euler(eulers).eulerAngles == (80.0, 235.0, 169.0)
FromQ2(Quaternion.Euler(eulers)) == (65.8, 1.9, 99.8)
ToQ(eulers).eulerAngles == (70.0, 286.9, 341.4)
FromQ(Quaternion.Euler(eulers)) == (-65.8, 76.0, 4.6)

It must be:
FromQ() = FromQ2() = .eulerAngles,
ToQ() = Quaternion.Euler()
Run Code Online (Sandbox Code Playgroud)

代码在这里:http://pastebin.ru/eAlTHdYf

任何人都可以更正此代码?我需要的代码将返回与Unity函数返回的值相同的值.

UPDATE

这是固定代码:http://pastebin.com/riRLRvch …

c# math quaternions euler-angles unity-game-engine

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

bool检查比null检查更快吗?

我需要提取吗?

bool xIsNull = x == null
Run Code Online (Sandbox Code Playgroud)

从我检查的循环x == null

据我所知if (a == true),if (x == null)两者都使用相同的IL指令.但是指针由32位或64位组成.CLR应该检查每一位与null进行比较吗?

更新
快速测试显示没有区别,但我仍然希望有人解释这一点.

UPDATE2
我使用IL发射,所以我不能指望编译器优化我的代码.只有JIT.

c# performance

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

3D相对角度和计算

我有一个四元数形式的旋转r1的3D对象.我用当地的欧拉角旋转它:

transform.Rotate(new Vector3(0f, 15f, 0f), relativeTo: Space.Self); // right
transform.Rotate(new Vector3(-10f, -5f, 0f), relativeTo: Space.Self); // left up
transform.Rotate(new Vector3(0f, 0f, 90f), relativeTo: Space.Self); // 90 clockwise
Run Code Online (Sandbox Code Playgroud)

现在我有旋转r2.如果我不知道应用了哪些角度,如何检索局部Y旋转和15-5 + 0 = 10?可能无法获得完全相同的价值(10),但你已经有了我的想法.也许我可以在当地的r2空间获得Y diff ?

c# math euler-angles unity-game-engine

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

什么X >> = N呢?

我有这个代码:

tmp = (uint)len;
writer.CurPosition = value + 1;
do
{
    value++;
    writer.dest.WriteByte((byte)((tmp & 0x7F) | 0x80));
} while ((tmp >>= 7) != 0);
Run Code Online (Sandbox Code Playgroud)

但我不明白是怎么tmp >>= 7运作的?

c# bitwise-operators

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

多维数组枚举器是否保证所有实现的顺序相同?

这总是会在所有平台上以相同的顺序打印元素吗?

foreach (var el in multidimArray) Console.WriteLine(el);
Run Code Online (Sandbox Code Playgroud)

我正在寻找规格或任何官方报价.

c# specifications multidimensional-array

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

特征对象如何将具有泛型方法的特征作为参数?

所以特征对象不能有泛型方法——看起来不错。但在这种语言中,使用抽象机制的唯一方法是通过泛型和特征对象。这意味着对于每个特征,我必须事先决定它是否可以用作对象,并在各处使用 dyn 而不是 impl。并且它内部的所有特征都必须以相同的方式来支持这一点。这种感觉非常难看。你能提出什么建议或者告诉我为什么这样设计吗?

fn main() {}

// some abstracted thing
trait Required {
    fn f(&mut self, simple: i32);
}

// this trait doesn't know that it's going to be used by DynTrait
// it just takes Required as an argument
// nothing special
trait UsedByDyn {
    // this generic method doesn't allow this trait to be dyn itself
    // no dyn here: we don't know about DynTrait in this scope
    fn f(&mut self, another: impl Required);
}

// this …
Run Code Online (Sandbox Code Playgroud)

generics abstraction traits rust trait-objects

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

未知维度数组的顺序填充

我有一个Array未知的维度。例如,它可能是object[]object[,]object[,,,]

我想按顺序填充它(例如 [2,2] 这个顺序:0,0; ​​0,1, 1,0; 1,1):

Array arr = ... // input array
for (int i = 0; i < arr.Length; i++)
{
     arr.SetValue(stream.ReadNextObject(), ???); // convert i -> int[] indexes
}
Run Code Online (Sandbox Code Playgroud)

我知道i可以使用%运算符进行对话,但很难想象多维的精确算法。二维只有一个答案:将一维数组的索引转换为二维数组即行和列

我可以用来Stack<int>在遍历数组时存储索引,但似乎这样%会更有效率(我真的需要在这里关心性能)。但我不确定Stack<T>vs %

c# arrays algorithm performance multidimensional-array

-1
推荐指数
1
解决办法
553
查看次数