Сначала необходимо измерить реалистичный набор данных, а затем решить, какая производительность выше.Если в вашем типичном наборе данных часто ничего нет, то вызов Contains()
может быть более быстрым (поскольку, хотя Replace
также выполняет итерацию по всем символам в строке, будет создан дополнительный строковый объект и собран мусор из-занеизменяемость строк), но если «X» часто присутствует, проверка становится пустой тратой и фактически замедляет работу.
Кроме того, обычно это не первое место, где нужно искать и беспокоиться о проблемах производительности.Такие вещи, как диалоговые интерфейсы, сетевой ввод-вывод, веб-службы, базы данных, файловый ввод-вывод и обновления графического интерфейса, повредят вам на несколько порядков больше, чем подобные вещи.
Если вы собираетесь делать такие вещи, какэто, и если Row
вернулся из базы данных (как следует из названия), то получение базы данных для выполнения запроса может быть другим подходом для сохранения производительности.Например,
select MyTextColumn from MyTable where MyTextColumn like '%X%'
Затем выполните замену для всех результатов, поскольку вы знаете, что возвращали результаты только в том случае, если замена была необходима.
Хотя это вызывает другие проблемы - например, в SQLСервер, если в приведенном выше примере указан индекс на MyTextColumn
, SQL Server не сможет использовать этот индекс, поскольку аргумент like
начинается с символа подстановки (он не считается «sargable»).
Таким образом, сначала напишите для корректности, удобочитаемости и обслуживания, затем измерьте производительность и сделайте целевые улучшения там, где они требуются .