string sVar = "abcdefghijklmnopqr";
idx = sVar.IndexOf('p', 0); // 1
idx = sVar.IndexOf("p", 0); // 2
idx = Strings.InStr(1, sVar, "p"); // 3
위 구문을 각각 시간 측정 해봤다.
100만회씩 돌렸는데,
나는 순서대로 속도가 빠를거라 생각했다.(당연히 첫줄 1번부터)
그런데 속도는 1,3,2 순으로 나옴. 그것도 2번이 X같이 느림.
(물론 정확하게 저 3개 구문 중 1개씩만 for 루프에 넣었음)
일단 1번은 예상대로 빠르고, 0.033초 나옴.
2번은 ㅅㅂ 1.200초 나옴.
3번은 0.100 ~ 0.200 초 로 왔다갔다함.
이번엔 두 글자 해봤다.
idx = sVar.IndexOfAny(new char[] { 'p', 'q' }, 0); // 4
idx = sVar.IndexOf("pq", 0); // 5
idx = Strings.InStr(1, sVar, "pq"); // 6
5번은 그대로 1.200초
4,6번은 비슷하게 0.200초 정도.
C# 이런거 많더라.
뭘 해도 무조건 비베보다 빠를거라 착각들 하던데,
저것만봐도 일부는 케바케임. ㅅㅂ 그것도 모르고 더 느린거 쳐 쓰고 있었네. ㅂㄷㅂㄷ
(참, InStr은 using Microsoft.VisualBasic; 써야하고, 참조도 추가해야하고, 첫번째 인덱스가 1번임. IndexOf는 0이고.)
근데 C#은 IndexOf 말고 InStr 같은거 없냐?
InStr 보다 느리다니 너무 충격이다.
빠른거 없음?
VB.NET 말하는거면 둘이 어차피 컴파일되면 함수만 다르고 어셈은 거의 비슷하다고 보면 되지 않으려나
닷넷은 닷넷임
당연히 디버그 릴리즈 다 해봤고, VB6 구문은 C#에서 못씀여. VB.NET임. 생각난김에 VB6도 해봐야하나???
...;
VB6도 함 해봤는데 VB.NET과 비슷함. 어째서 C#이 비베보다 느린거야? ㅠㅠ 한글자만 검색하든가, 무조건 IndexOfAny로 길게 써줘야하나 ㅠㅠ
아, 별 상관은 없는 내용이지만, VB6에서 C# 마이그레이션 하다가, InStr을 Strings.InStr로 바꿔놨길래 뭐가 빠른지 테스트 함 해본거임. IndexOf로 바꿔주길 기대하고 한건데...