' Format a value ' expN1 Value ' expC1 Separator ' expN2 Number of decimals Public Function GetFormatValue(ByVal tnValue As Double, ByVal tcSeparator As String, _ ByVal tnDecimal As Integer) As String Dim lcValue As String = "" Dim loCultureInfo As CultureInfo = Nothing ' Based on the language Select Case nLanguage ' English Case 1 loCultureInfo = New CultureInfo("en-US") ' French Case 2 loCultureInfo = New CultureInfo("fr-CA") ' Spanish Case 3 loCultureInfo = New CultureInfo("en-US") ' Portuguese Case 4 loCultureInfo = New CultureInfo("en-US") End Select loCultureInfo.NumberFormat.NumberDecimalSeparator = "." loCultureInfo.NumberFormat.NumberGroupSeparator = tcSeparator loCultureInfo.NumberFormat.NumberDecimalDigits = tnDecimal lcValue = tnValue.ToString("N", loCultureInfo) Return lcValue End FunctionI didn't pay attention to it until now. So far, it was mostly used on request for a few displays on a form. But, when being called thousands of times during a hit, this has a significant impact. I am moving the creation of the object at the application initialization level to have it executed only once and store loCultureInfo into oApp.oCultureInfo.