문제

내가 원하는 경우 연결 문자열 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 는'깔끔한'메모리 관리 문자열 연결(는 더 많이 만들어 임시 인스턴스)이것도에 영향을 미치 전반적인 성능의 외부 문자열 루프(다음 시간 쓰레기를 수집기 실행).

는 방법을 알려주세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top