WritePrivateProfileString函数写ini文件时,有时候速度特慢,不知道为什么!!?
WritePrivateProfileString函数写ini文件时,有时候速度特慢,不知道为什么!!?
程序如下:
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(g_ModelNodeInfo.m_pcDBBackupFile, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
char pcWasteNo[20];
sprintf(pcWasteNo, "%lu ",m_nTableTollWasteNO-1);
WritePrivateProfileString( "WasteNO ", "MinWasteNO ",pcWasteNo,g_ModelNodeInfo.m_pcDBBackupFile);
} else
{
FindClose(hFind);
}
try
{
int nFlagStation = -1;
COleDateTime CreationTime((time_t)g_ModelTollInfo.m_TollWasteBook.m_nCreationTime);
char pcSession[20],pcBuf[50];
_itoa(m_nTableTollWasteNO,pcSession,10);
if(m_nTableTollWasteNO == (int)GetPrivateProfileInt(pcSession, "WASTE_NO ",0,g_ModelNodeInfo.m_pcDBBackupFile)) return(0);
WritePrivateProfileString(pcSession, "NET_ID ",_itoa(g_ModelNodeInfo.m_nNetID,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "STATION_ID ",_itoa(g_ModelNodeInfo.m_nStationID,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "NODE_ID ",_itoa(g_ModelNodeInfo.m_nNodeID,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "NODE_TYPE ",_itoa(g_ModelNodeInfo.m_nNodeType,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "TRAFFIC ", "1 ",g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "WASTE_NO ",_itoa(m_nTableTollWasteNO,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "CREATION_TIME ",_itoa(g_ModelTollInfo.m_TollWasteBook.m_nCreationTime,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "OPERATOR_ID ",_itoa(g_ModelOperatorInfo.m_nOperatorID,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "SHIFT_NO ",_itoa(g_ModelOperatorInfo.m_nShiftNO,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "WORK_DATE ",_itoa((int)g_ModelOperatorInfo.m_oletmWorkDate.m_dt,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
SYSTEMTIME SystemTimeTemp;
g_ModelOperatorInfo.m_oletmLogonTime.GetAsSystemTime(SystemTimeTemp);
CTime CTimeLogonTime(SystemTimeTemp);
WritePrivateProfileString(pcSession, "LOGON_TIME ",_itoa(CTimeLogonTime.GetTime(),pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "VEHICLE_CLASS ",_itoa(g_ModelTollInfo.m_TollWasteBook.m_nVehicleClass,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "VEHICLE_CASE ",_itoa(g_ModelTollInfo.m_TollWasteBook.m_nVehicleCase,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "VEHICLE_WEIGHT ",_itoa(g_ModelTollInfo.m_TollWasteBook.m_nLoad,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "TOLL_RECEIVABLE ",_itoa((int)g_ModelTollInfo.m_TollWasteBook.m_fTollReceivable,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "TOLL_ACTUAL ",_itoa((int)g_ModelTollInfo.m_TollWasteBook.m_fTollActual,pcBuf,10),g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileString(pcSession, "RECEIPT_NO ",g_ModelTollInfo.m_TollWasteBook.m_pcReceiptNO,g_ModelNodeInfo.m_pcDBBackupFile);
char pcWasteNo[20];
sprintf(pcWasteNo, "%lu ",m_nTableTollWasteNO);
WritePrivateProfileString( "WasteNo ", "MaxWasteNO ",pcWasteNo,g_ModelNodeInfo.m_pcDBBackupFile);
wchar_t pwcbuff[_MAX_PATH];
swprintf(pwcbuff,L "%hs ",g_ModelNodeInfo.m_pcDBBackupFile);
WritePrivateProfileStringW( NULL, NULL, NULL, pwcbuff);
return(0);
}
catch(...)
{
return(1);
}
[解决办法]
记得有工具软件写ini
只写:0101010101011101011100001001011010...
这样就快了。
不过,可读性几简乎为0
再嫌慢就用XML
[解决办法]
每次WritePrivateProfileString都需要打开文件,读取,查找键,重写整个文件。
网上有很多优化的替代。 先在内存中处理好, 最后写整个文件。
[解决办法]
blog.csdn.net/surpaimb/archive/2006/08/21/1103357.aspx
www.lihuasoft.net/article/show.php?id=3360
[解决办法]
不至于这么慢吧?如果完整的程序,我可以晚上抽时间调试下看看。