![](/img/trans.png)
[英]Is Thread.CurrentThread.ManagedThreadId multi-processor safe
[英]Repeatedly call CurrentThread.ManagedThreadId or store the value in thread local storage?
有沒有人對實施有任何了解
SystemThreading.Thread.CurrentThread.ManagedThreadId
比如它是否正在進行內核往返? 我特別想知道從多個線程重復調用它是否比讀取一次值更好,將它存儲在線程本地存儲中然后再使用該值,就像
ThreadLocal<int> ThreadId = new ThreadLocal<int>(() =>
Thread.CurrentThread.ManagedThreadId);
...
Tracer.Add("Thread:" + ThreadId.Value);
我今天要測量兩種變體,但認為事先聽到任何想法(或偏見:)會很有趣。
CurrentThread和ManagedThreadId都是內部調用屬性,因此值retreival由框架本身處理。 由於它們是屬性而不是方法,因此可以合理地假設它們可以快速訪問並且不需要存儲它們,除非您將它們放在具有大量迭代的循環中。
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));
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.