Najszybszy sposób sprawdzenia, czy łańcuch może zostać przeanalizowany
Analizuję pliki CSV na listy obiektów o silnie wpisanych właściwościach. Wymaga to przeanalizowania każdej wartości ciągu z pliku doIConvertible
rodzaj (int
, decimal
, double
, DateTime
, itp.) za pomocąTypeDescriptor
.
Używamtry catch
radzić sobie z sytuacjami, gdy przetwarzanie nie powiedzie się. Dokładne informacje o tym, gdzie i dlaczego ten wyjątek występuje, są następnie rejestrowane w celu dalszego zbadania. Poniżej znajduje się kod parsujący:
try
{
parsedValue = TypeDescriptor.GetConverter(type).ConvertFromString(dataValue);
}
catch (Exception ex)
{
// Log failure
}
Problem:
Po pomyślnym przeanalizowaniu wartości proces jest szybki. Podczas analizowania danych z dużą ilością niepoprawnych danych proces może trwać tysiące razy wolniej (z powodu przechwycenia wyjątku).
Testowałem to z parsowaniem doDateTime
. Oto wyniki:
To ponad 4500 razy wolniej.
Pytanie:
Czy mogę sprawdzić, czy wartość ciągu może zostać pomyślnie przeanalizowana bez konieczności używania mojego drogiegotry catch
metoda? A może jest inny sposób, w jaki powinienem to zrobić?
EDYCJA: Muszę użyćTypeDescriptor
(i nieDateTime.TryParse
), ponieważ typ jest określany w czasie wykonywania.