복잡한 SQL 문과 같이 큰 텍스트 문자열을 작성하는 경우가 있습니다. 이 텍스트를 몇 번에 걸쳐 여러 번 붙여 넣으려고합니다. 각각은 약간 다른 매개 변수를 사용합니다. 단순히 기존의 문자열 연결을 사용하는 것이 아니라이 성능을 방해 할 수 있는지 궁금 큰 문자열 Text := Text + S + #10 + #13;
컴파일러는 문자열 연결을 최적화합니까?
에있는 텍스트 (S
)를 추가 단지 procedure A(const S: String);
라는 이름의 서브 루틴을 사용하는 습관에 왔어요?
Text := 'some' + ' ' + 'text' + ' ' + 'and' + ' ' + 'such';
Text := 'some text and such';
이것이 사실로 : 나는 컴파일러 이런 식으로 뭔가를 최적화 생각하기 시작입니까? 컴파일러가이 시나리오를 최적화합니까? 그렇다면, 나는 이런 식으로 모든 것을 변경하기로 결정할 수도 있습니다 :
Text := 'select something from sometable st'+#10+#13+
'join someothertable sot on sot.id = st.sotid'+#10+#13+
'where sot.somevalue = 1'+#10+#13+
'order by sot.sorting';
이 빠르게 이론적으로
Text:= Text + 'select something from sometable st'+#10+#13;
Text:= Text + 'join someothertable sot on sot.id = st.sotid'+#10+#13;
Text:= Text + 'where sot.somevalue = 1'+#10+#13;
Text:= Text + 'order by sot.sorting';
보다겠습니까 아니면 일반적으로 그것을 할 방법 :
A('select something from sometable st');
A('join someothertable sot on sot.id = st.sotid');
A('where sot.somevalue = 1');
A('order by sot.sorting');
왜 디버거에서 열어서 생성 된 ASM을 확인하지 않습니까? –
ASM을 이해할 수 없기 때문에 나는 그것을 보았을 때 아무 것도 보이지 않습니다 : P –
이 질문은 "코드 정리"가 프로젝트의 성능에서 더 중요한 결함으로 이어지는 완벽한 예입니다. –