На моем компьютере выдача исключения стоит около 0,042 мс, плюс около 0,026 мс, чтобы что-то с ним сделать. До тех пор, пока отладчик не подключен. Если я запускаю его с отладчиком Visual Studio 2015, это стреляет примерно до 15 мс, разница при выполнении каких-либо действий с ним теряется в шуме.
Ниже приведен код теста и результаты, но это произвольный тест. Я бы не использовал исключения при разборе длинных списков очень плохих данных, я бы использовал TryParse ().
Если накладные расходы на исключения достаточно плохие, чтобы их можно было заметить, сначала запустите их без отладчика, затем вы можете переписать свой код.
В режиме без отладки вы, вероятно, можете генерировать и обрабатывать тысячи исключений каждую секунду, то есть они не дорогие, используйте их много.
private const int DataSize = 1000;
private const string TestInt = "1";
static void Main(string[] args)
{
#if DEBUG
Console.Write("DEBUG code, ");
#else
Console.Write("RELEASE code, ");
#endif
Console.Write(System.Diagnostics.Debugger.IsAttached ? "Debugger attached. " : "no debugger. ");
Console.WriteLine($"{DataSize} of \"{TestInt}\"");
var seedData = new List<string>();
seedData.AddRange(Enumerable.Repeat(TestInt, DataSize));
var stopWatch = new System.Diagnostics.Stopwatch();
// Handled
stopWatch.Restart();
var exceptions = new List<Exception>();
foreach (var item in seedData)
{
try
{
var x = int.Parse(item);
}
catch (Exception ex)
{
exceptions.Add(ex);
}
}
var elapsed = stopWatch.Elapsed;
Console.WriteLine($"Handled {elapsed}.");
// Swallowed
stopWatch.Restart();
foreach (var item in seedData)
{
try
{
var x = int.Parse(item);
}
catch (Exception ex)
{
}
}
elapsed = stopWatch.Elapsed;
Console.WriteLine($"Swallowed {elapsed}.");
// But I would do this task using TryParse()
stopWatch.Restart();
var failedStrings = new List<string>();
foreach (var item in seedData)
{
int x;
if (!int.TryParse(item, out x))
failedStrings.Add(item);
}
elapsed = stopWatch.Elapsed;
Console.WriteLine($"Tryparse {elapsed}.");
Console.ReadKey();
}
RELEASE-код, без отладчика. 1000 "х"
Обработано 00: 00: 00.0632112.
проглочен 00: 00: 00.0366465.
Tryparse 00: 00: 00.0000955.
Код отладки, без отладчика. 1000 "х"
Обработано 00: 00: 00.0743439.
Проглотил 00: 00: 00.0491802.
Tryparse 00: 00: 00.0001026.
RELEASE код, отладчик прилагается. 1000 "х"
Обработано 00: 00: 15.3732464.
Проглотил 00: 00: 15.2940802.
Tryparse 00: 00: 00.0001101.
Код отладки, отладчик прилагается. 1000 "х"
Обработано 00: 00: 15.1689722.
Проглотил 00: 00: 15.1741098.
Tryparse 00: 00: 00.0001026.
RELEASE-код, без отладчика. 1000 из "1"
Обработано 00: 00: 00.0001697.
Проглотил 00: 00: 00.0001575.
Tryparse 00: 00: 00.0001756.
Код отладки, без отладчика. 1000 "1"
Обработано 00: 00: 00.0002214.
Проглотил 00: 00: 00.0001946.
Tryparse 00: 00: 00.0001093.
RELEASE код, отладчик прилагается. 1000 из "1"
Обработано 00: 00: 00.0001807.
Проглотил 00: 00: 00.0003288.
Tryparse 00: 00: 00.0003351.
Код отладки, отладчик прилагается. 1000 "1"
Обработано 00: 00: 00.0001117.
Проглотил 00: 00: 00.0000884.
Tryparse 00: 00: 00.0000911.