2013-03-18 2 views
1

this 대답에 이어 성공적으로 객체를 복사했습니다.최대 성능을 가진 객체를 복사하는 방법

그러나 현재 프로젝트에서 성능이 가장 중요합니다. 그래서 몇 가지 단위 테스트를 수행하고 실행하는 데 걸리는 시간을 확인했습니다. 최대 200ms를 기대하면서 결과는 평균 2 초였습니다! 나는 시간의 90 %가 Object 복사기에 쓰는 것을 알게되었습니다.

이 성능을 향상시킬 수있는 방법이 있습니까? 다른 방법으로 객체를 복사 할 수 있습니까? 누구든지 배열이나 목록을 얼마나 빨리 복사하는지 알 수 있습니까? 나는 그런 사용법을 고려할 것이다.

+0

얼마나 많은 물체가이 시설을 필요로합니까? – qujck

+0

1이지만 여러 번 복사됩니다. 내 개체에서 가장 중요한 속성은 다차원 배열입니다. 그래서 나는 그것을 (단순한 배열이나리스트로) 많이 바꿀 수있다. 성능을 크게 향상시키는 경우이 작업을 수행 할 의향이 있습니다 – dylanmensaert

+0

하드 코딩 된 복사본이 다른 것보다 성능이 우수합니다 – qujck

답변

10

속도 문제가 범용 솔루션에 의존하지 않는 경우 (특히이 경우에는 일반적으로 성능이 실제로 저하되는 문제를 해결하기가 어려우므로 문제를 효율적으로 해결할 수 있음) 일반적인 경우) 대부분은 일반적으로 문자열 조작에 많은 시간과 노력이 소비되므로 본질적으로 성능이 좋지 않은 직렬화에 의존합니다. 해당 유형을 알고있는 것을 기반으로 개체를 수동으로 만들고 복사해야하는 항목을 기반으로 관련 필드를 수동으로 복사하십시오.

딥 (deep) 복사본보다는 차이가없는 개체를 관찰 할 방법이 없으므로 딥 (deep) 복사본이 아닌 모든 불변 개체 (immutable objects)의 복사본 만 만들어야합니다.

+0

변경되지 않는 객체에 대한 읽기 전용 (즉, 명백하게 변경 불가능한) 참조를 포함하는 "그릇된 불변"객체를주의하십시오. 이러한 객체가 객체를 포함하는 객체로 전달되면 객체를 포함하는 객체 외부에서 변형 될 수 있습니다. 해결 방법은 이러한 객체의 방어 복사본을 만들어 포함 객체에 사본을 저장하는 것입니다. –

+1

@MatthewWatson 매우 사실입니다. 이것이 일반화되지 않은 솔루션에서 많은 것을 얻을 수있는 이유이며 (왜 일반화가 그렇게 어렵습니까?) 왜 어떤 정보를 복사해야하는지, 돌연변이의 눈에 보이는 부작용을 가질 수 있는지 여부는 알 수 없다는 것입니다. 자동으로 결정될 수 있습니다. 일반적인 해결책은 수비 사본을 만들도록 강요되지만 비 일반 해결책은 알 수 없으며 성과 이점을 얻을 수 있습니다. – Servy

관련 문제