2012-11-12 4 views
2

개체가 다른 개체 (메모리 풀)를 만드는 방법에 차이점이 있습니까? 다른 크기의 데이터? 그래서 어떤 크기의 메모리 풀에서 객체를 요청하면, 가장 가까운 크기의 할당 된 메모리 청크를 반환합니다. C#로 작성해야합니다. 고맙습니다. 왜냐하면 제가 정확히 알지 못하기 때문입니다.이 최고의 알고리즘을위한 최고의 콜렉션은 무엇입니까? C++에는 몇 가지 솔루션이 있지만 C# 용 메모리 풀이 없습니다.다른 크기의 개체에 대한 메모리 풀 -

+0

당신이 필요로하지 않기 때문입니다 ... C#에서는 메모리 관리가 CLR에 의해 처리됩니다. 또는, 귀하의 경우, 왜 명시 적 메모리 관리를해야합니까? –

+0

무엇이 필요합니까? 올바르게 기억한다면, 힙 조각화를 피하기 위해 메모리 풀이 사용됩니다. C#에서는 쓰레기 수거가 이러한 일을 처리하기 때문에 필요하지 않을 것입니다. – Treb

+0

예, 클라이언트가 서버 (특정 프로토콜을 통해), 클라이언트 (또는 여러 클라이언트)가 서버에 데이터를 보내고 데이터가 메시지 (문자열) + 데이터 형식 인 통신 라이브러리를 작성해야합니다. 다른 크기 및 형식). 그러나이 통신은 2 ~ 3 주간 중단없이 진행될 수 있으므로 통신하는 동안 데이터로 수천 통의 메시지를 보낼 수 있습니다. 사장님은 쓰레기 수거가이 목적을 위해 충분하지 않다고 생각한다고 말씀하셨습니다. 메모리 풀을 작성해야합니다. 그러나이 분야에서는 기술 (메모리 덩어리 등)이 없습니다. –

답변

2

.Net Framework에는 이미 Windows Communication Foundation에서 사용되는 구현이 있습니다. BufferManager

var buffMgr = BufferManager.CreateBufferManager(
       104857600, // use no more than 100 MB in total 
       10485760); // allocate 10 MB max to each buffer 
var buff = buffMgr.TakeBuffer(65535); // allocate a buffer enough to fit a 65 KB object 
          // note: this could return a buffer bigger than 65 KB 

//when done with the buffer: 
buffMgr.ReturnBuffer(buff); 
+0

감사합니다! 나는 찾고있는 것 같다. –