Удивительно, но это расширение не замедлило мои запросы PLINQ - что я мог измерить.
В сложном запросе со многими вызовами AsParallel () вам, возможно, придется вызывать SetCulture () после каждого AsParallel ().
Я не уверен, есть ли одна точка для добавления .SetCulture () (или одна точка для AsParallel в этом отношении), поэтому я просто добавил .SetCulture () после каждого вызова AsParallel (), и это прекрасно работало.
Кроме того, вы можете также рассмотреть настройку CurrentUICulture.
например Использование PLINQ для поиска в коллекции бизнес-объектов для поиска бизнес-объектов с нарушенными правилами (платформа CSLA, коллекция нарушенных правил) заставит потоки PLINQ (потоки пула потоков) искать локализованные (наше требование) строковые ресурсы для установки строки ошибки (RuleArgs). Описание).
Мне просто нужно было расширить расширение ParallelQueryCultureExtensions.
Это хорошо сработало для меня (я должен использовать VB.NET, следовательно ...):
Public Module PLINQExtensions
<Extension()> _
Public Function SetCulture(Of TSource)(ByVal source As ParallelQuery(Of TSource), ByVal culture As CultureInfo, ByVal uiCulture As CultureInfo) As ParallelQuery(Of TSource)
SetCulture(culture, uiCulture)
Return source.Select(Function(item)
SetCulture(culture, uiCulture)
Return item
End Function
)
End Function
<Extension()> _
Private Sub SetCulture(ByVal culture As CultureInfo, ByVal uiCulture As CultureInfo)
If (Not Thread.CurrentThread.CurrentCulture.Equals(culture)) Then
Thread.CurrentThread.CurrentCulture = culture
End If
If (Not Thread.CurrentThread.CurrentUICulture.Equals(uiCulture)) Then
Thread.CurrentThread.CurrentUICulture = uiCulture
End If
End Sub
End Module