前不久,因為專案的要求對資料訪問十分頻繁,如果每次都是分配記憶體,然後釋放,會產生大量的記憶體碎片,所以設計了乙個資料池模板類,該類很簡單,主要功能有: 1.
初始化資料池 2.
清空資料池 3.
取得一段資料緩衝區 4.
釋放一段資料緩衝區 5.
取得緩衝區記錄數
如何使用:
使用步驟如下: 1,
建立資料池:
cdatabufferdatabuf;
databuf.init(); 2,
如果你需要設定資料池的大小,可以呼叫setmaxbufsize函式來完成,函式定義如下:
bool setmaxbufsize(long lmaxbufsize); lmaxbufsize是要指定的資料池大小。
databuf. setmaxbufsize(10*1024*1024);//大小設為10m
3,當你想取得一條記錄時:
mystruct * pdata = databuf.getbuffer(); 4,
在使用完該記錄後:
databuf. releasebuffer(pdata);
夠簡單的吧,好了,下面時程式的**:
#if !defined(afx_databuffer_h__f5fdeb06_6c87_4d8b_af80_06d47ba3b459__included_)
#define afx_databuffer_h__f5fdeb06_6c87_4d8b_af80_06d47ba3b459__included_
#if _msc_ver > 1000
#pragma once
#endif // _msc_ver > 1000
#include
#include "mutexlock.h"
using namespace std;
//最大資料池容量 單位是byte
#define maxbuffersize 10*1024*1024
template
class cdatabuffer
virtual ~cdatabuffer()
//取得乙個資料緩衝區
tdata * getbuffer();
//釋放資料緩衝區,這裡沒有真正釋放,而是把資料存放到資料池中
bool releasebuffer(tdata * pdata)
catch (...)
}else
m_pmutex->unlock();
return true;
}//取得資料池中有多少資料緩衝區
long getbuffercount()
//設定資料池允許的最大資料容量
bool setmaxbufsize(long lmaxbufsize)
return false;
}//取得資料池允許的最大資料容量
long getmaxbufsize()
//初始化
bool init();
//清空緩衝區
bool clearbufferpool();
//private:
//關閉
bool close()
return true;
}private:
typedef listbuffer_list;
buffer_list m_ldatapool; //資料池
cmutexlock* m_pmutex; //互斥區
long m_lmaxbuffercount; //最大資料緩衝區數
};//
template
bool cdatabuffer::init()
return true;
}template
bool cdatabuffer::clearbufferpool()
first++;
}//清空列表
m_ldatapool.clear();
}catch (...)
return true;
}template
tdata* cdatabuffer::getbuffer()
m_pmutex->unlock();
if(pdata == null)
//注意,如果記憶體耗盡,系統快崩潰時,這裡取得的也是null指標
return pdata;}//
#endif // !defined(afx_databuffer_h__f5fdeb06_6c87_4d8b_af80_06d47ba3b459__included_)
乙個簡單的模板類(PHP)
接上話,有了乙個資料操作類,這樣專案只能簡單地運算元據,但是要達到能夠和美工一起顯示美好的頁面,則需要乙個比較好的模板引擎。與smarty這樣比較龐大的模板引擎相比,我想下面這個則真算得小得多了。這個模板類是我以前在網上看到的,寫得比較好,所以我就引用了,還不知道作者是誰,這裡就先講一下這個類的原理...
乙個簡單的模板類(PHP)
有了乙個資料操作類,這樣專案只能簡單地運算元據,但是要達到能夠和美工一起顯示美好的頁面,則需要乙個比較好的模板引擎。與smarty這樣比較龐大的模板引擎相比,我想下面這個則真算得小得多了。這個模板類是我以前在網上看到的,寫得比較好,所以我就引用了,還不知道作者是誰,這裡就先講一下這個類的原理。首先,...
乙個簡單的類模板的使用
include include using namespace std template class mylist void print private t a t b template 不可少 void mylist print 宣告和定義都要放在同乙個 檔案中,否則會出現錯誤提示 error l...