뭔가.... <div><br></div> <div>게임을 만들었는데 이상하게 발열이 쩐다 싶어서</div> <div><br></div> <div>이것저것 찾아보니 최적화 관련 문서가 있더라구요.</div> <div><br></div> <div>그걸 보니까</div> <div><br></div> <div>"string"+"string"하고,</div> <div>int.ToStrin()하고,</div> <div>오브젝트를 생성, 파기하는데 컴퓨터 자원을 많이 쓴다고 하길래</div> <div><br></div> <div><br></div> <div>요 세가지만 뜯어내려고 머리를 빡세게 굴리고 있습니다.</div> <div><br></div> <div>헤헤....</div> <div><br></div> <div>우선 친구 네트워크로 물어물어 찾아보니 string+string가 반복될때 생기는 스펙 저하는 StringBuilder 를 쓰면 된다더라구요</div> <div><br></div> <div>system.text.stringBuilder 물론 자동완성으로 대소를 변경해줘야 하기는 하지만....</div> <div><br></div> <div>여기에 마법의 예제가!</div> <div><div>System.Text.StringBuilder sb = new System.Text.StringBuilder();</div> <div>sb.Append("[");</div> <div>sb.Append(index);</div> <div>sb.Append("] ");</div> <div>sb.Append(name);</div> <div>sb.AppendLine();</div> <div>sb.ToString();</div></div> <div><br></div> <div><br></div> <div>int.ToString()요건 어떻게 해도 떼어내기가 힘들더라구요.</div> <div><br></div> <div> 이게 성능상의 저하를 일으키는 이유가 int는 고정된 크기의 값을 가지는 변수인데 비해서, string는 char의 배열이다보니 int를 분해해서 적당한 수치의 배열을 생성해서 각 위치에 파싱된 글자를 넣어주고, 남는 배열을 자르고 하는 일들을 하다 보면 굉장히 자원이 많이 소비된다고 합니다.</div> <div><br></div> <div>뭐.... 안쓰려고 해도 스테이터스가 한자리수인데 C#에는 toChar도 딱히 없어보이고, convert.toChar 이라는게 있다는데 성능상으로 어떻게 변화가 일어날지 모르니 낼름 손을 뻗기에는 애매하네요..... 차라리 일정 숫자를 더한다음에 (char)을 붙여서 캐스팅하는게 나을지도.... 라는 생각이 드는게 말이죠.</div> <div><br></div> <div><br></div> <div>마지막으로 오브젝트 동적 생성인데 뭐.... 없는거 새로 만들려면 당연히 컴퓨터도 빡세기야 하겠죠. 그런걸 해결하기 위해서 오브젝트 풀을 만들어서 거기다가 미리 쓸 오브젝트들을 넣어두고, 필요할때 가져다가 썼다가, 필요없으면 다시 풀에 반환하면 된다고 합니다.</div> <div><br></div> <div>문제는 풀에 있는 오브젝트 이상을 가져다 쓰게 될 경우인데.... 다른건 괜찮은데 순환호출로 오브젝트가 호출, 반환되는 경우에는 오브젝트를 몇백개 준비시켜놔야 할 텐데 그게 멀쩡히 버텨줄지가 걱정입니다....</div> <div><br></div> <div><br></div> <div>이펙트라던가, 탄막같은걸 생각하면 그걸 모조리 오브젝트 풀에 싸그리 모셔두느니 동적호출이 낫지 않을까.... 라는 생각이 들 정도로 말이죠.</div> <div><br></div> <div><br></div> <div>혹시 다른분들은 비슷한 작업을 하신 적 있나 해서 글 적어봅니다.</div> <div><br></div> <div>이왕이면 해결하신 마법의 비법도....</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.