令人驚訝的是,這個擴展沒有減慢我的PLINQ查詢 - 我可以測量。
在一個具有許多AsParallel()調用的複雜查詢中,您可能必須在每個AsParallel()後調用SetCulture()。 我不確定是否有一個點需要添加.SetCulture()(或者AsParallel的一個點),所以我在每次AsParallel()調用之後添加了.SetCulture(),並且效果很好。
此外,您也可以考慮設置CurrentUICulture。 例如使用PLINQ搜索Business Object集合以查找具有破壞規則的業務對象(CSLA框架,Broken Rules集合)將導致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
這工作完美,至少直到我可以移動到.net 4.5 :) – Porco 2012-06-11 22:40:22