Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说CString的效率测试,希望能够帮助你!!!。
#VC205# #MFC#
有时候我们使用CString,不为别的,只是一个简单的格式化一个数字,但是CString的内部是需要申请内存的(堆),虽然说作用域过去了,就自动释放。但频繁的申请与释放,对系统来讲,也是需要时间去处理它的。所以我就想,使用局部变量(栈)来实现。
定义了一个struct 里面有一个变量 pv ,它是一个数组,而不是指针
struct jStrBuf##N{
TCHAR pv[N];
}
JSTRBUF(1024) 表示定义一个
struct jStrBuf1024 {
TCHAR pv[1024];
}
为了方便使用,我给它定义了一个长度Len,这个Len,初始时是数组的长度,一但调用过Format后,结果就是实际的字符串长度
#pragma once
#define JSTRBUF(N)\
struct jStrBuf##N {\
TCHAR pv[N];int Len = N;\
operator LPCTSTR(){return pv;}\
jStrBuf##N(){pv[0]=0;}\
jStrBuf##N & operator =(LPCTSTR v){Len=lstrlen(lstrcpy(pv,v));return *this;}\
TCHAR operator[](int i){return i<0?pv[Len+i]:pv[i];}\
TCHAR * D(int v){return Format(_T("%d"),v);}\
TCHAR * X(unsigned char v){return Format(_T("%02X"),v);}\
TCHAR * Format(LPCWSTR fm, ...) { return Len=_vstprintf_p(pv,N, fm,(char*)(&fm+1)),pv; }};
JSTRBUF(4096);
#ifdef _DEBUG
void JSTRBUF_test(int N) {
int tick;
SYSTEMTIME st; GetLocalTime(&st);
wprintf(_T("jStrBuf Vs CString [N=%dw]\n")
_T(" Time:%04d-%02d-%02d %02d:%02d:%02d\n\n"),
N/10000,
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
tick = GetTickCount();
CString cstr;
for (int i = N; i >= 0; i--) {
GetModuleFileName(0, cstr.GetBuffer(256), 256);
cstr.Format(_T("%s %f"), cstr, 20230510.0);
if (i == 0) wprintf(_T("CString\n N=%d\n Value=%s\n tick=%d\r\n"),
N, (LPCTSTR)cstr, GetTickCount() - tick);
}
tick = GetTickCount();
jStrBuf4096 jstr;
for (int i = N; i >= 0;i--) {
GetModuleFileName(0, jstr.pv, jstr.Len);
jstr.Format(_T("%s %f"), jstr.pv, 20230510.0);
if (i == 0) wprintf(_T("jStrBuf\n N=%d\n Value=%s\n tick=%d\r\n"),
N, (LPCTSTR)jstr, GetTickCount() - tick);
}
tick = GetTickCount();
for (int i = N; i >= 0; i--) {
TCHAR buf[MAX_PATH];
GetModuleFileName(0, buf, MAX_PATH);
_stprintf_p(buf,N,_T("%s %f"),buf, 20230510.0);
if (i == 0) wprintf(_T("wsprintf.buf\n N=%d\n Value=%s\n tick=%d\r\n"),
N, (LPCTSTR)jstr, GetTickCount() - tick);
}
}
#endif
测试结果如下,分别是10万,50万,100万次的测试结果,CString 消耗的时间都是1倍
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章