У меня есть код, который в значительной степени опирается на метод String.Substring, до того момента, когда метод Substring замедляет мое приложение. Я знаю, что диапазон, который я хочу получить, находится внутри String (это не выходит за рамки.) Может ли что-то, что я мог бы использовать вместо подстроки, было бы быстрее? Могу ли я написать собственный метод подстроки, который может отказаться от любых проверок границ?Заменить C# String.Substring
Пример кода:
public String get_element(int element_number) {
int count = 0;
int start_index = 0;
int end_index = 0;
int current_index = 0;
while (count < element_number && current_index != -1) {
current_index = line_text.IndexOf(x12_reader.element_delimiter, start_index);
start_index = current_index + 1;
count++;
}
if (current_index != -1) {
end_index = line_text.IndexOf(x12_reader.element_delimiter, start_index);
if (end_index == -1) end_index = line_text.Length;
return line_text.Substring(start_index, end_index - start_index); ;
} else {
return "";
}
}
Я вижу много комментариев с просьбой, если подстрока действительно проблема. Я знаю, что проблема заключается в подстроке. Я выполняю профилирование в Visual Studio, и он указал на подстроку в качестве виновника. Также я не могу назвать эту функцию меньше, чем сейчас. Единственное место, которое я оставил для оптимизации, - это функция подстроки. Я знаю, что это так.
Как вы определили, что 'Подстрока' - это горло бутылки? – juharr
Можете ли вы позволить хранить ваши данные в виде массива вместо строкового DSV. Например, можете ли вы начать разбить 'line_text' на массив и просто получить доступ к элементу' element_number'? – Yakuza
Я был бы удивлен тем, что проверка границ является виновником вашей проблемы с производительностью. – hatchet