StackExchange.Redis 将线程集中的所有命令组合在一起

示例

class ToyProfiler : IProfiler

{

    public ConcurrentDictionary<Thread, object> Contexts = new ConcurrentDictionary<Thread, object>();

    public object GetContext()

    {

        object ctx;

        if(!Contexts.TryGetValue(Thread.CurrentThread, out ctx)) ctx = null;

        return ctx;

    }

}

// ...

ConnectionMultiplexer conn = /* initialization */;

var profiler = new ToyProfiler();

var thisGroupContext = new object();conn.RegisterProfiler(profiler);

var threads = new List<Thread>();

for (var i = 0; i < 16; i++)

{

    var db = conn.GetDatabase(i);

    var thread =

        new Thread(            delegate()

            {

                var threadTasks = new List<Task>();

                for (var j = 0; j < 1000; j++)

                {

                    var task = db.StringSetAsync("" + j, "" + j);                    threadTasks.Add(task);

                }

                Task.WaitAll(threadTasks.ToArray());

            }

        );

    profiler.Contexts[thread] = thisGroupContext;    threads.Add(thread);

}conn.BeginProfiling(thisGroupContext);

threads.ForEach(thread => thread.Start());

threads.ForEach(thread => thread.Join());

IEnumerable<IProfiledCommand> timings = conn.FinishProfiling(thisGroupContext);

最后,计时将包含16,000个IProfiledCommand对象-每个发布给redis的命令一个。

以上是 StackExchange.Redis 将线程集中的所有命令组合在一起 的全部内容, 来源链接: utcz.com/z/326353.html

回到顶部