110,538
社区成员
发帖
与我相关
我的任务
分享
double *Image = new double[width*height];
for(i=0; i<width*height; i++)
*(Image+i) = *(Src_Image+i);
public class Graphics2DShow:IDisposable
{
public virtual void Dispose()
{
Dispose(true);
GC.SuppressFinalize();
}
protected virtual void Dispose(bool disposing)
{
if(!isDisposed)
{
if(disposing)
{
//释放图片非托管资源
}
//释放托管资源
}
isDisposed = true;
}
~Graphics2DShow()
{
Dispose(false);
}
}
Class BufferPool
{
private int initialPoolSize;
private int bufferSize;
private Queue<double[]> m_FreeBuffers; //pool of buffers
public BufferPool (int initialPoolSize,int bufferSize)
{
this.initialPoolSize = initialPoolSize;
this.bufferSize = bufferSize;
m_FreeBuffers = new Queue<double[]>(initialPoolSize);
for (int i = 0; i < initialPoolSize; i++)
{
m_FreeBuffers.Enqueue(new double[bufferSize]);
}
}
public double[] Checkout() // check out a buffer
{
if (m_FreeBuffers.Count > 0)
{
lock (m_FreeBuffers)
{
if (m_FreeBuffers.Count > 0)
return (double[])m_FreeBuffers.Dequeue();
}
}
//return new double[BUFFER_SIZE]; //instead of creating new buffer,blocking waiting or refusing request may be better
return new double[bufferSize];
}
public void Checkin(double[] buffer) //check in a buffer
{
lock (m_FreeBuffers)
{
m_FreeBuffers.Enqueue(buffer);
}
}
}
}
class ResultUVBufferPool:BufferPool
{
private static ResultUVBufferPool theResultUVBufferPool = null;
public static ResultUVBufferPool getResultUVBufferPool(int initialPoolSize, int bufferSize) //单例模式
{
if(null==theResultUVBufferPool)
{
theResultUVBufferPool = new ResultUVBufferPool(initialPoolSize, bufferSize);
}
return theResultUVBufferPool;
}
private ResultUVBufferPool(int initialPoolSize, int bufferSize): base(initialPoolSize, bufferSize)
{
}
}
double *Image = new double[width*height];
for(i=0; i<width*height; i++)
*(Image+i) = *(Src_Image+i);