相关疑难解决方法(0)

是什么让Enum.HasFlag这么慢?

我正在做一些速度测试,我注意到Enum.HasFlag比使用按位操作慢大约16倍.

有谁知道Enum.HasFlag的内部以及为什么它如此之慢?我的意思是两倍慢不会太糟糕但是当它慢了16倍时它会使该功能无法使用.

如果有人想知道,这是我用来测试其速度的代码.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace app
{
    public class Program
    {
        [Flags]
        public enum Test
        {
            Flag1 = 1,
            Flag2 = 2,
            Flag3 = 4,
            Flag4 = 8
        }
        static int num = 0;
        static Random rand;
        static void Main(string[] args)
        {
            int seed = (int)DateTime.UtcNow.Ticks;

            var st1 = new SpeedTest(delegate
            {
                Test t = Test.Flag1;
                t |= (Test)rand.Next(1, 9);
                if (t.HasFlag(Test.Flag4))
                    num++;
            });

            var st2 = new SpeedTest(delegate
            {
                Test t = …
Run Code Online (Sandbox Code Playgroud)

.net c#

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

Threading.Volatile.Read(Int64)和Threading.Interlocked.Read(Int64)之间的区别?

Read(Int64).NET系统类System.Threading.Volatile和的方法有什么区别System.Threading.Interlocked

具体而言,关于(a)原子性和(b)内存排序,它们各自的保证/行为是什么。

请注意,这是关于Volatile阶级,不是volatile(小写)的关键字。


MS docs状态:

易读方法

读取字段的值。在需要它的系统上,插入一个内存屏障,以防止处理器按以下方式重新排序内存操作:如果在代码中此方法之后出现读取或写入,则处理器无法在此方法之前移动它。

...

退货 Int64

读取的值。不管处理器数量或处理器缓存状态如何,此值都是计算机中任何处理器最新写入的值。

Interlocked.Read(Int64)方法

返回作为原子操作加载的64位值。

似乎特别令人困惑的是,这些Volatile文档没有谈论原子性,并且这些Interlocked文档没有谈论排序/内存障碍。

旁注:作为参考:我更熟悉C ++原子API,其中原子操作也总是指定内存排序语义。


Pavel有用地提供的问题链接(和可传递链接)很好地解释了挥发性记忆屏障和原子无撕裂阅读的区别/正交性,但它们并没有解释这两个概念如何应用于这两个类别。

  • 是否Volatile.Read保证原子性?
  • 是否Interlocked.Read(或者,真的,任何的Interlocked功能)做出的内存为了任何保证?

c# multithreading volatile interlocked

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

JitIntrinsicAttribute如何影响代码生成?

我浏览.NET源代码并看到了这个属性.它说,

可以附加到JIT内部方法/属性的属性

并根据MSDN:

表示修改后的方法是实时(JIT)编译器可以执行特殊代码生成的内部值.这个类不能被继承.

但我有麻烦找怎么样.在什么样的代码上执行特殊的代码生成?

我的主要猜测是它主要使用像SIMD这样的处理器指令,就像 Java JIT那样.这是一个例子.我对它的加速感到好奇,我想知道Mono是否也这样做了.

.net c# clr mono intrinsics

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

标签 统计

c# ×3

.net ×2

clr ×1

interlocked ×1

intrinsics ×1

mono ×1

multithreading ×1

volatile ×1