무엇이 문자열 연결 방법을 사용한 N 개의 반복?
-
20-09-2019 - |
문제
내가 원하는 경우 연결 문자열 N 번는 방법을 내가 좋아하는가?
이 코드 예를 들어:
public static string Repeat(this string instance, int times)
{
var result = string.Empty;
for (int i = 0; i < times; i++)
result += instance;
return result;
}
이 메소드를 호출할 수 있습니다"함께 시간 설정"5 또 5000.어떤 방법을 사용하는 것을 선호?
문자열입니다.가입?Stringbuilder?다만 표준 문자열입니다.Concat?
비슷한 기능을 구현에 상업적 라이브러리 그래서 정말 필요로"최선"작업을 수행하는 방법입니다.
해결책
public static string Repeat(this string instance, int times)
{
if (times == 1 || string.IsNullOrEmpty(instance)) return instance;
if (times == 0) return "";
if (times < 0) throw new ArgumentOutOfRangeException("times");
StringBuilder sb = new StringBuilder(instance.Length * times);
for (int i = 0; i < times; i++)
sb.Append(instance);
return sb.ToString();
}
다른 팁
물론의 문자열 건물. 문자열에 합류 할 때마다 새 개체를 생성하지 않기 때문에 빠른 문자열 조인 작업을위한 것입니다.
자세한 내용은 참조하십시오 여기.
StringBuilder.
"결과 += 결과;"
문자열이 불변이기 때문에 할당을 할 때마다 새 문자열을 생성하고 그 새 문자열을 변수에 할당합니다.
StringBuilder와 함께 가십시오.
지 않는 가정을 할 수 있는 한 가지 방법은 빠르게 다른 보다-당신상의 성능을 측정 모두고 다음을 결정합니다.
놀랍게도,적은 수의 반복,그냥 표준 문자열 연결(result+=문자열)자주보다 더 빨리 문자열을 사용하여 작성기입니다.
당신이 알고 있는 경우는 번호의 반복을 항상 같은 것(예:그것은 항상 있을 것입니다 50 반복음),고려할 것을 제안하고 몇 가지 성과 측정을 사용하여 다른 방법이 있습니다.
는 경우 말 을 얻고 싶은 영리한 성능 측정에 대한 번호의 반복을 찾을 수 있습는'크로스오버 포인트는 하나의 방법은 빠르게 다른 것보다고 하는 코드를 문으로 들 방법:
if(iterations < 30)
{
CopyWithConcatenation();
}
else
{
CopyWithStringBuilder();
}
정확한 성능을 크로스오버 지점에 따라 달라집니다 특정의 세부 사항 코드고 당신이 할 수 없을거야 그들이 무엇인지 알아보십시하지 않고 성능을 측정합니다.
일을 복잡하게 조금 더 StringBuilder 는'깔끔한'메모리 관리 문자열 연결(는 더 많이 만들어 임시 인스턴스)이것도에 영향을 미치 전반적인 성능의 외부 문자열 루프(다음 시간 쓰레기를 수집기 실행).
는 방법을 알려주세요.