Замена ReaderWriterLock с ReaderWriterLockSLim - проблемы

Если Вам когда-либо любопытно на предмет различий в методах BCL, , Отражатель является Вашим другом :-)

я следую этим инструкциям:

Точное совпадение: РЕДАКТИРОВАНИЕ: Я ранее всегда использовал == оператор на принципе, который внутри Равняется (строка, строка) объекту ==, оператор используется для сравнения ссылок на объект, но кажется, что strA.Equals (strB) все еще на 1-11% быстрее в целом, чем строка. Равняется (Стра, strB), Стра == strB, и строка. CompareOrdinal (Стра, strB). Я циклично выполняюсь протестированный с StopWatch и на строковых значениях interned/non-interned с теми же/отличающимися длинами строки, и на переменных размерах (1B к 5 МБ).

strA.Equals(strB)

Человекочитаемое соответствие (Западные культуры, нечувствительные к регистру):

string.Compare(strA, strB, StringComparison.OrdinalIgnoreCase) == 0

Человекочитаемое соответствие (Все другие культуры, нечувствительный случай/диакритический знак/кана/и т.д., определенный CultureInfo):

string.Compare(strA, strB, myCultureInfo) == 0

Человекочитаемое соответствие с пользовательскими правилами (Все другие культуры):

CompareOptions compareOptions = CompareOptions.IgnoreCase
                              | CompareOptions.IgnoreWidth
                              | CompareOptions.IgnoreNonSpace;
string.Compare(strA, strB, CultureInfo.CurrentCulture, compareOptions) == 0

7
задан Ian Boyd 19 August 2013 в 18:26
поделиться

1 ответ

Вызов MethodX из MethodA квалифицирует его как рекурсивное использование блокировки.
См. Примечания на странице MSDN для ReaderWriterLockSlim:

По умолчанию новые экземпляры ReaderWriterLockSlim создаются с LockRecursionPolicy.NoRecursion флаг и не разрешать рекурсию. Эта политика по умолчанию рекомендуется для всех новая разработка, потому что рекурсия вносит ненужные осложнения и делает ваш код более подверженным тупиковые ситуации. Чтобы упростить миграцию с существующие проекты, использующие Monitor или ReaderWriterLock можно использовать LockRecursionPolicy.SupportsRecursion флаг для создания экземпляров ReaderWriterLockSlim, которые позволяют рекурсия.

8
ответ дан 6 December 2019 в 21:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: