gpt4 book ai didi

c# - 重复调用CurrentThread.ManagedThreadId或将值存储在线程本地存储中?

转载 作者:行者123 更新时间:2023-12-03 13:20:40 24 4
gpt4 key购买 nike

有没有人对...的实现有任何见识

SystemThreading.Thread.CurrentThread.ManagedThreadId

像是在做内核往返吗?我特别想知道从多个线程重复调用它是否比一次读取该值,将其存储在线程本地存储中,然后从此以后使用该值更好,例如
ThreadLocal<int> ThreadId = new ThreadLocal<int>(() =>
Thread.CurrentThread.ManagedThreadId);
...
Tracer.Add("Thread:" + ThreadId.Value);

我今天将要测量这两种变体,但是认为事先听到任何想法(或成见:)会很有趣。

最佳答案

CurrentThread和ManagedThreadId都是内部调用属性,因此值返回由框架本身处理。由于它们是属性,而不是方法,因此可以合理地假定可以快速访问它们,并且不需要存储它们,除非您将它们放入具有多次迭代的循环中。

public extern int ManagedThreadId
{
[__DynamicallyInvokable, ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), SecuritySafeCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
get;
}

如果您关心使用此属性进行日志记录,我们可以看一下流行的日志记录框架(如NLog)如何使用它。原来,它不缓存它,而是直接使用它:
namespace NLog.LayoutRenderers
{
public class ThreadIdLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append(Thread.CurrentThread.ManagedThreadId.ToString(CultureInfo.InvariantCulture));
}
}
}

关于c# - 重复调用CurrentThread.ManagedThreadId或将值存储在线程本地存储中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16010765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com