Я разбираю файлы 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), потому что тип определяется во время выполнения.