할당 된 개체를 사용하고 나중에 할당을 풀링하는 풀링 알고리즘을 작업 중입니다. 그러나 객체를 재활용의 문제 중 하나는 예를 들면 다음과 같습니다사용 후 개체 변수 지우기 (풀링) C#
someObject obj = pool.alloc(); //gives me a new object if no previous allocations, If an allocation has been recycled, returns a previous allocation
obj.someVariable = "foo";
pool.recycle(obj);
나는 것이 었습니다 경우 여분의 램을 할당 할 필요가 없도록 기존 할당을하고 저장됩니다 위의 코드 또 다른 someObject. 그러나 다음이 문제가 작성
someObject obj = pool.alloc(); //gives me the above allocation
obj.otherVariable = "bar";
obj.dump();
을 따라서, 나는 다음과 같은 결과를 얻을 것이다 :
someVariable = foo
otherVariable = bar
위의 접근 방식은 문제를 만듭니다. 어떤 이유 (또는 다른 누군가)가 객체 내부에서 특정 변수를 사용하지 않는 알고리즘을 사용하면 이전 값으로 인해 불필요한 동작이 발생할 수 있습니다. 내가 약간의 방법으로 기본 생성자를 다시 호출 할 수 있는지 (나쁜 아이디어), C# (고맙게도)이 그렇게 할 수없는 것처럼 보이는지 조금 훑어 보았다. 그러나 이것을 수행하기 위해 리플렉션을 사용하는 방법이 있는지 궁금합니다. 또한 객체의 변수를 지우는 것이 malloc (새로운)을 피하는 목적을 무효화합니까? 즉, 변수를 지우는 데 시간을 소비하면 성능 향상이 최소화됩니까? 나는 비평과 조언이 크게 평가되도록 풀링을 가르치려고 노력하고 있습니다! 당신은 당신이 이미 존재하는 객체를 검색하여 피할 수있는 몇 가지 복잡한 설정 작업을 재사용하는 경우
풀링 정말 필요한 경우에만입니다 :
이 풀링 *이 필요하다는 증거가 있습니까? –
아마도이 작업을 원하지 않을 것입니다. 변수를 쉽게 재사용 할 수 있다면 컴파일러/JITter는 알지 못하면 그렇게 할 것입니다. 그렇지 않다면 더 비싸고 작동하지 않을 확률이 더 높습니다. (또한 프로그래머에게 더 높은 부담을줍니다. 각 항목이 완료되면 앱에 알립니다.) – Servy