我在遇到某種情況時遇到了自己,當我重寫的ToString()
方法將使用其中一個實例的集合時。在ToString()方法中使用lock()進行集合
public override string ToString()
{
string returnStr = "testString";
lock (_sync)
{
returnStr = $"{returnStr}: {string.Join(",", _testList)}"; // where _testList is a List<string> in the class's scope
}
return returnStr;
}
因爲我們正在談論的是一個多線程應用程序,我想知道,因爲我會爲了避免集合的修改使用lock()
的ToString()
方法的身體內部產生我返回的字符串的同時。雖然我正在對集合進行修改,但當然,同一對象(_sync
)正在被鎖定。
但是,這個方法也被其他幾個進程使用,比如Visual Studio的調試器,誰知道還有什麼,因爲這個方法是繼承自Object
類本身。
例如:我擔心它可能會在場景後面(通過框架或其他任何東西)被更頻繁地調用,並且必須使用鎖定(這可能會導致性能下降),或者可能導致死鎖我在不好的時刻進行調試。
問:
我要關心這個情況,因爲這可能會導致問題,或者是確定以使用對象內ToString()
鎖定(以及從.NET類型其他繼承的方法)?
有沒有更好的替代解決方案來實現這個目標?
注意:我正在考慮在每次修改時(在鎖的內部,它被操作的地方)從集合中生成所需的字符串,所以我會將集合的字符串格式準備好連接起來在ToString()
方法本身。我想這對性能會更好,因爲string.Join()
的過程不會在每次呼叫ToString()
時都運行,但我真的很想知道更多關於這種情況的信息。
謝謝!