문제

질문은 입력이 문자열 유형인지 확인 답을 닫았습니다. 두 가지 솔루션은 두 가지 솔루션이 더 잘 수행 될 것인가?

Reed Copsey 제공 Char.IsLetter를 사용하여 솔루션 :

string myString = "RandomStringOfLetters";
bool allLetters = myString.All( c => Char.IsLetter(c) );
.

적응 regex를 사용하여 마크 바이어스 :

string s = "RandomStringOfLetters";
bool allLetters = Regex.IsMatch(s, "^[a-z]+$", RegexOptions.IgnoreCase);
.

리드 나 마크의 질문을 묻는 것을 원하지 않으므로 나는 더 잘 수행되는 것을 결정하기 위해 빠른 테스트를 쓸 것이라고 생각했습니다. 문제는 많은 코드 최적화를 수행하지 않았습니다 (나는 다른 모든 것 위에 코드 가독성을 놓는 경향이 있습니다).

각각의 실행 전후에 타임 스탬프를 취하는 이외의 다른 솔루션이 빠르게 실행되는지 결정하는 다른 (더 나은?) 옵션이란 무엇입니까?

편집

i 수정 Martin의 답변 작업하기 Console.WriteLine(...)를 사용하여 콘솔 응용 프로그램으로 실행합니다. linqpad 응용 프로그램을 실행하지만 결과는

에 대해 알지 못합니다.
41
178
.

도움이 되었습니까?

해결책

이 작업을 수행하고 스톱워치 .또한 프로파일 링을 할 때 명심해야 할 몇 가지 매우 중요한 것들이 있습니다.

  1. 는 항상 1 시간 이상 테스트를 실행합니다.처음 실행하는 경우, JIT에서 오버 헤드가 있으며, 타이밍은 오해의 소지가 될 수 있습니다.여러 번 달리고 평균을 취하는 것은 좋은 접근 방식입니다 (예를 들어,이 100,000 번의 테스트를 실행할 것입니다.)
  2. Visual Studio 호스팅 프로세스 외부에서 항상 전체 릴리스 빌드로 테스트를 실행합니다.(기본적 으로이 Ctrl + F5를 사용할 수 있습니다.) Visual Studio 호스트는 타이밍을 크게 영향을줍니다.

다른 팁

System.Diagnostics.Stopwatch를 확인해야합니다!

http://msdn.microsoft.com/ko/ko.-US / Library / System.Diagnostics.StopWatch.aspx

타이밍 오류 및 기타 통제 할 수없는 요소를 줄이기 위해 루프에서 여러 번 실행해야합니다.

도움이되기를 바랍니다.

linqpad in the whom 이 편리한 도구를 사용하지 않으면 덤프 () - console.writeline (...)을 사용하여 교체하십시오.

은 LINQ 방식이 4 배 이상 4 배 더 빠르게 나타납니다.

System.Diagnostics.Stopwatch stopwatch = new Stopwatch();

stopwatch.Start();
for (int i = 0; i < 100000; i++)
{
 string myString = "RandomStringOfLetters";
 bool allLetters = myString.All( c => Char.IsLetter(c) );
}
stopwatch.Stop();
stopwatch.ElapsedMilliseconds.Dump();

stopwatch.Reset();

stopwatch.Start();
for (int i = 0; i < 100000; i++)
{
 string s = "RandomStringOfLetters";
 bool allLetters = Regex.IsMatch(s, "^[a-z]+$", RegexOptions.IgnoreCase);
}
stopwatch.Stop();
stopwatch.ElapsedMilliseconds.Dump();
.

출력 :

47 
196
.

시스템이 있습니다 .Diagnostics.StopWatch 클래스를 사용할 수 있습니다.

테스트하는 코드는 JIT 비용을 제거한 다음 최종 타이밍을 위해 다시 실행하십시오.대부분의 개별 타이밍 카운트는 PC의 다른 요소로 인해 표시되지 않을 수 있으므로 많은 반복을 실행 한 다음 평균 런타임을 계산합니다.

System.Diagnostics.StopWatch 클래스를 사용합니다.

스톱워치를 시작하고 수천 개의 반복을 실행하고, 그만 중지하고 경과 한 총 밀리 초를 확인하십시오

더 빨리 결정하는 단계 : -

  1. 컴퓨터 컬렉션, 몇 백 - 백 / intel / 기타, 32 비트 / 64 비트, ...

  2. 각각의 각각의 .NET 프레임 워크를 설치 (차례로)

  3. 컴파일을 위해 각 최적화 옵션의 각 조합 (차례)

  4. 스톱워치를 사용하여 각

  5. 마다 큰 실행 테스트

  6. 나머지 애플리케이션에 더 큰 영향을 미칠 수있는 각각에 대한 메모리 사용률을 모니터링합니다.증가 된 메모리 소비 비용과 더 많은 가비지 수집 활동의 비용으로 몇주기를 절약하는 것은 종종 '최적화'가 종종 있습니다.

  7. 은 적어도 컴파일러의 현재 릴리스에서는 실제로 실제로 더 빠른 아이디어를 제공 할 수 있습니다.컴파일러의 각 새 릴리스에서 반복하십시오.

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