Рассмотрим следующую функцию:
public enum Operator
{
EQUAL = 1,
GREATER_THAN = 2
}
public class checkString
{
public static bool isValid(string inputString, string checkString, Operator operation)
{
switch (operation)
{
case Operator.EQUAL:
if (inputString == checkString)
return true;
break;
case Operator.GREATER_THAN:
// Numeric check for greater than
try
{
double inputDouble, checkDouble;
inputDouble = Convert.ToDouble(inputString);
checkDouble = Convert.ToDouble(checkString);
if (inputDouble > checkDouble)
return true;
}
catch (Exception)
{ }
// Date check for greater than
try
{
DateTime inputDate, checkDate;
inputDate = DateTime.Parse(inputString);
checkDate = DateTime.Parse(inputString);
if (inputDate. > checkDate)
return true;
}
catch (Exception)
{ }
break;
}
return false;
}
}
Параметры
- inputString: что мы хотим оценить
- checkString: критерий (значение), с которым входные данные должны оцениваться по
- Оператор: Enum для операции, которую мы хотим выполнить
Другие вещи, которые нужно знать
- Каждая строка в файле сравнивается с этим методом для возврата, если условие было выполнено
- Процесс оценки записей в файле проверяется построчно, в одном случае это соответствует условию. Он также может проверить, что та же строка также больше, чем условие. Как только проверки завершены, он переходит к следующей записи
- Нет дополнительных прослушивателей событий, кроме тех, которые установлены по умолчанию, я не загружаю дополнительные данные в журналы отладки или трассировки
Задача
То, что люди собираются оценивать, неизвестно мне в любой момент этого процесса, но мне нужно иметь возможность проверить, что «что-то» (независимо от того, что) равно, больше или меньше чего-то другого. Конечно, я проверяю другие вещи, но я значительно упростил эту функцию.
Тем не менее, использование EQUAL или NOT_EQUAL выполняется как можно быстрее, обрабатывая записи в очень большом файле в соответствии с указанными критериями довольно быстро и эффективно. Как только я добавил логику GREATER_THAN, она стала медленной ... до такой степени, что для обработки 20 мегабайтных файлов, которые раньше занимали полминутные вершины, требуются минуты.
Из того, что я могу сказать:
- Исключения выбрасываются повсюду. Нет гарантии, что поле будет числовым или типа даты. Поэтому я должен попытаться привести к этим типам данных, чтобы попытаться оценить условие
- Когда генерируются исключения, консоль получает вывод там, где я не дал указание сделать это, своего рода автоматизированный
Да, у меня нет опыта в этой области, и я хочу узнать больше об обработке исключений и о том, что на самом деле происходит за кулисами, потому что, когда остальные 80% записей не являются числовыми, это много исключений в 20. мег, 80 тыс. файлов записи.
Есть ли лучший способ обработать сам актерский состав для повышения эффективности? Я видел double.Parse / TryParse и умеет направлять перед собой, но не уверен, что принесет больше пользы.