令人惊讶的是,这个扩展并没有减慢我的 PLINQ 查询速度——我可以测量。
在具有许多 AsParallel() 调用的复杂查询中,您可能必须在每个 AsParallel() 之后调用 SetCulture()。我不确定是否有一个位置可以添加 .SetCulture() (或者 AsParallel 的一个位置),所以我只是在每次 AsParallel() 调用之后添加了 .SetCulture() ,效果很好。
此外,您也可以考虑设置 CurrentUICulture。例如,使用 PLINQ 搜索业务对象集合以查找具有破坏规则的业务对象(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