DateTime. ParseExact () быстрее, чем DateTime. Синтаксический анализ ()

Я хотел бы знать, быстрее ли ParseExact, чем Синтаксический анализ.

Я думаю, что это должен быть ParseExact, так как Вы уже дали формат, но я также думаю, что вся проверка информацию о Культуре замедлила бы его. Делает Microsoft, говорят в любом документе о различии в производительности между двумя. Формат, который будет использоваться, является универсальным 'yyyy/MM/dd' форматом.

Например:

DateTime.Parse(DateText);
DateTime.ParseExact(DateText, "yyyy/MM/dd", CultureInfo.InvariantCulture);
10
задан Nap 25 March 2010 в 04:52
поделиться

2 ответа

Вы спрашиваете о разнице в скорости для двух методов, которые функционально различаются (близки, но все же разные).

Просто выберите наиболее подходящий.

И нет, производительность библиотечных методов почти никогда не документируется.

Но я могу сказать вам кое-что об этой разнице:

  • она небольшая,
  • она может измениться в будущих версиях
16
ответ дан 3 December 2019 в 19:32
поделиться

Если вы укажете только один формат для TryParseExact , это все, что он попробует. Parse пробует все форматы либо до тех пор, пока не будет найдено наилучшее совпадение, либо пока не будет найдено первое совпадение. (Я не уверен, что именно.) Я сделал это несколько недель назад с настроенным CultureInfo. Я не тестировал производительность, но я выполнил модульные тесты моих методов синтаксического анализа (без настроенного CultureInfo, см. Ниже) для 61 880 дат, хранящихся в базе данных. Проблем с производительностью не заметил.

Независимо от того, указываете ли вы CultureInfo или нет, внутренние процедуры синтаксического анализа будут использовать CultureInvariant, если ничего не передано. Таким образом, CultureInfo не замедляет процесс. (Есть некоторые проблемы с производительностью для иврита и других «экзотических» дат из-за необходимости дополнительного синтаксического анализа.) Исходя из моего обзора исходного кода для DateTime, количество строковых форматов определяет, насколько быстро эти процедуры могут анализировать строку даты. Чем больше форматов, тем медленнее. Если вы указываете только один, то синтаксический анализ будет максимально быстрым с помощью методов ... Exact .


Imports System.Globalization

Public Class ExifDateTime

    Private Shared _formats() As String = New String() { _
        "yyyy:MM:dd", _
        "yyyy:MM:dd HH:mm:ss", _
        "yyyy:MM:dd HH:mm:ss.f", _
        "yyyy:MM:dd HH:mm:ss.ff", _
        "yyyy:MM:dd HH:mm:ss.fff", _
        "yyyy:MM:dd HH:mm:ss.fffK", _
        "yyyy:MM:dd HH:mm:ss.ffffffK", _
        "yyyy:MM:dd HH:mm:ssK", _
        ""}


    Public Shared Function Parse(ByVal s As String) As Date
        Dim oResult As Date
        If TryParse(s, DateTimeStyles.None, oResult) = False Then
            Throw New FormatException
        End If
        Return oResult
    End Function

    Public Shared Function Parse(ByVal s As String, ByVal style As System.Globalization.DateTimeStyles) As Date
        Dim oResult As Date
        If TryParse(s, style, oResult) = False Then
            Throw New FormatException
        End If
        Return oResult
    End Function

    Public Shared Function TryParse(ByVal s As String, ByRef result As Date) As Boolean
        Return TryParse(s, DateTimeStyles.None, result)
    End Function

    Public Shared Function TryParse(ByVal s As String, ByVal style As System.Globalization.DateTimeStyles, ByRef result As Date) As Boolean
        Dim fResult As Boolean
        Dim oResultant As Date

        fResult = Date.TryParseExact(s, _formats, CultureInfo.InvariantCulture, style, oResultant)

        If fResult Then
            result = oResultant
        End If

        Return fResult

    End Function

End Class
4
ответ дан 3 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

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