사실 아주 사소한 부분에서 부터 생각보다 큰 문제가 발생하곤 한다.


이번이 그랬다...


현재 일하고 있는 사이트에서 특정 대상수가 아주 많아지면(수백개이상) 성능이 느려지는 문제가 있었다.

사람들은 처음에 쿼리를 의심했다 (나오는 exception 이 그러했거든... 그부분은 우선 넘어가고)


허나 점점 이건 쿼리 문제가 아니라는 느낌이 들었고 결과를 보면 맞는듯 했다.


이중루프가 과도하게 돌 수 있는 케이스가 존재하고 있었다. 

해서 그 내부루프를 map 으로 변경해서 어마어마? 한 성능향상을 이루었다.


그러나 반전이 있었으니...


아무래도 루프가 그정도 돈다고 (물론 많이 돌긴한다; 수십만회?) 그렇게 느려질수 있는가는 의문이랄까?

그리고 찾아보니 그와 유사한 혹은 더 많은 루프를 도는 케이스도 나왔는데 그건 ms 안에 종료되었다.


어.. 이상하다 역시... 이게 아니었어;



결과는... 두둥


Map 의 선언이 루프에 있었다는것이다.


즉 500개의 아이템이 있다면 500번만 생성되면된다.

그게 중첩루프를 돌더라도 말이다. (특정조건일때만 new 해서 맵을 생성함)


그런데 ... 어찌된건지; 맵의 선언을 조건절 밖에 두었고 결과


500*500 번의 인스턴스가 생성된것이다.

원래는 500개만 생성할것을;



어이없는 실수였지만 (당연히 평소에 저런식으로 생성하지 않는다; )


찾을때는 생각보다 시간이 오래 걸렸다; 



loop 을 돌면서 뭔가 리스트에 맵을 넣어야 할 경우, 나처럼 잘못된 인스턴스 생성으로 아이템수가 적을때는 몰랐다가 많아지면 생길 수 있는 성능이슈에 대해서 조심하도록 하자;  한마디로 항상 루핑조건을 만들땐 조심하자; 



+ Recent posts