Это то, что я сейчас использую, но я удивлен, почему профилировщик процессора показывает это как узкое место, в то время как в моей программе происходит множество других довольно дорогих сравнений.
private bool IsAscii(char c)
{
return ((int)c < 128);
}
Эта функция используется в программе обработки журналов и поэтому вызывается для каждого символа в журнале внутри замкнутого цикла.(но некоторые другие функции, такие как Char.IsLetterOrDigit (), кажется, не такие дорогие.)
Я также попробовал несколько вариантов, причем все они немного медленнее, чем показанная выше, или имеют аналогичную производительность.,Интересно, я делаю что-то в корне неправильно, поскольку я новичок в C #.
Вариации: -
// similar
private bool IsAscii(char c)
{
return (c < 128);
}
-
// slower
private bool IsAscii(char c)
{
return (Convert.ToInt32(c) < 128);
}
-
// similar
private bool IsAscii(char c)
{
return ((c & (~0x7f)) == 0);
}
-
// slower
// class member
private char asciiend = Char.ConvertFromUtf32(128)[0];
private bool IsAscii(char c)
{
return (c.CompareTo(asciiend) < 0);
}
-