Вы можете попробовать что-то вроде этого ..
.a {
font-family: "Itim", cursive;
position: absolute;
top: 10px;
left: 10px;
z-index: 1;
}
.b {
font-family: "Sedgwick Ave", cursive;
position: absolute;
top: 10px;
left: 10px;
}
Contains
вызовы IndexOf
:
public bool Contains(string value)
{
return (this.IndexOf(value, StringComparison.Ordinal) >= 0);
}
, Который звонит CompareInfo.IndexOf
, который в конечном счете использует реализацию CLR.
, Если Вы хотите видеть, как строки сравнены в CLR , который это покажет Вам (ищут CaseInsensitiveCompHelper).
IndexOf(string)
не имеет никаких опций и Contains()
использование, которое сравнивает Ординал (сравнение байта байтом вместо того, чтобы пытаться работать, умное выдерживают сравнение, например, e с Г©).
Так IndexOf
будет незначительно быстрее (в теории), поскольку IndexOf
переходит прямо к использованию поиска строки FindNLSString из kernel32.dll (питание отражателя!).
Обновленный для.NET 4.0 - IndexOf больше не использует Порядковое Сравнение и так Содержит, может быть быстрее. См. комментарий ниже.
Содержит (s2), много раз (в моем компьютере 10 раз) быстрее, чем IndexOf (s2), потому что Содержит, использует StringComparison. Порядковый, который быстрее, чем культура чувствительный поиск, который IndexOf делает по умолчанию (но это может измениться в .net 4.0 http://davesbox.com/archive/2008/11/12/breaking-changes-to-the-string-class.aspx ).
Содержит, имеет точно то же представление в качестве IndexOf (s2, StringComparison. Порядковый)> = 0 в моих тестах, но это короче и ясно дает понять Ваше намерение.
Вероятно, это не будет иметь значения вообще. Читайте это сообщение при Кодировании Ужаса ;): http://www.codinghorror.com/blog/archives/001218.html
Если Вы действительно хотите к микро, оптимизируют Ваш код, которого всегда сравнивает Ваш лучший подход.
платформа .NET имеет превосходную реализацию секундомера - Система. Диагностика. Секундомер
При помощи Отражателя Вы видите, это Содержит, реализован с помощью IndexOf. Вот реализация.
public bool Contains(string value)
{
return (this.IndexOf(value, StringComparison.Ordinal) >= 0);
}
Так Содержит, вероятно крошечный бит медленнее, чем вызов IndexOf непосредственно, но я сомневаюсь, что он будет иметь любое значение для фактической производительности.
От небольшого чтения кажется это под капотом Строка. Содержит метод, просто называет Строку. IndexOf. Различием является Строка. Содержит возвращает булевскую переменную в то время как Строка. IndexOf возвращает целое число с (-1) представление, которым не была найдена подстрока.
я предложил бы писать немного теста приблизительно с 100,000 повторений и лично убедился бы. Если бы я должен был предположить, то я сказал бы, что IndexOf может быть немного быстрее, но как я сказал это просто предположение.
у Jeff Atwood есть хорошая статья о строках в его блог . Это больше о конкатенации, но может быть полезно, тем не менее.
Пользуйтесь библиотекой сравнительного теста, как этот недавний набег от Jon Skeet для измерения его.
Как все (микро-) вопросы о производительности, это зависит от версий программного обеспечения, которое Вы используете, детали осмотренных данных и код, окружающий вызов.
Как все (микро-) вопросы о производительности, первый шаг должен быть должен получить рабочую версию, которая легко удобна в сопровождении. Затем сравнительное тестирование, профилирование и настройка могут быть применены к измеренным узким местам вместо предположения.
Так же, как обновление к этому, я провел некоторое тестирование и предоставил вам довольно большую входную строку, тогда параллельное Regex - это самый быстрый метод C #, который я нашел (при условии, что у вас более одного ядра, как мне кажется)
Например, получение общего количества совпадений -
needles.AsParallel ( ).Sum ( l => Regex.IsMatch ( haystack , Regex.Escape ( l ) ) ? 1 : 0 );
Надеюсь, это поможет!