Я разбираю файлы CSV в списках объектов с сильно типизированными свойствами. Это включает в себя разбор каждого строкового значения из файла на тип IConvertible
(int
, decimal
, double
, DateTime
и т.д.) С помощью TypeDescriptor
.
Я использую try catch
для обработки ситуаций при сбое анализа. Точные данные о том, где и почему возникает это исключение, регистрируются для дальнейшего изучения. Ниже представлен код синтаксического анализа:
try
{
parsedValue = TypeDescriptor.GetConverter(type).ConvertFromString(dataValue);
}
catch (Exception ex)
{
// Log failure
}
Проблема:
Когда значения успешно разбираются, процесс выполняется быстро. При анализе данных с большим количеством недействительных данных процесс может занять тысячи раз медленнее (из-за улавливания исключения).
Я тестировал это с помощью парсинга DateTime
. Это показатели производительности:
- Успешный синтаксический анализ: средний 32 тика за разбор
- Неудачный синтаксический анализ: средний 146296 тиков за разбор
Это более чем в 4500 раз медленнее.
Вопрос:
Возможно ли, чтобы я проверил, можно ли корректно проанализировать строковое значение без использования моего дорогого метода try catch
? Или, возможно, есть другой способ, которым я должен это делать?
EDIT: мне нужно использовать TypeDescriptor
(а не DateTime.TryParse
), потому что тип определяется во время выполнения.