https://arca.live/b/textgame/9438538

이 글 참고


위 글에 의하면, 구문을 PRINT 여러개를 사용해 출력할 경우 메모리 누수가 발생하지만 이들을 한 문자열 변수 배열에 집어넣고 FOR를 사용해 배열을 돌며 출력할 경우 메모리 누수가 별로 발생하지 않는다고 함.

그래서 테스트를 좀 더 해봤는데,

FOR 구문이 메모리 정리를 해주나 싶어서 루프를 돌지 않는 FOR 구문 안에 20만개의 PRINT를 적어넣고 돌린 결과 메모리가 여전히 줄줄 샘.

혹시 PRINT와 PRINTFORM의 차인가 싶어 PRINTFORM 20만개를 도배해봤는데 여전히 샘

변수의 값을 출력할 때와 그냥 문자열을 직접 입력할 때의 차인가 싶어 PRINT 어쩌고저쩌고 1개를 담은 20만 루프짜리 FOR를 돌리니 메모리가 안샘.

반대로 텍스트를 변수에 담아놓고 PRINTFORM 20만개를 적어서 출력하도록 하니 메모리가 샘.


위와 같은 실험 결과에 비추어 보았을 때, 아마도 메모리 누수량은 ERB파일에 적어놓은 명령의 갯수만큼 발생하는 것 같음. 명령 각각을 하나의 객체로 만들어 메모리에 로드하고 해당 줄을 읽을 때 그 객체를 불러오는 식이라서 그런 것으로 추정. 따라서 메모리를 최대한 줄이기 위해서는 최대한 명령(특히 PRINT들)을 줄여야 할 것 같음. PRINT와 PRINTV 등으로 잘게잘게 쪼개놓은 구문을 PRINTFORM 한 줄로 처리한다든가 같이.