::SaveUTF8
xml などを保存する時, ::SaveUTF8(outName, outStr) ; の様にしていた.
動作としてはそれ程問題なかったように思うが,32 ビット exe で対象のデータが 50 MB 位を超えるとメモリ不足に…
例えば 100 MB の xml データの場合,
もとのデータの Xml_E で 200 M,tstring の outStr でも 200 M.
保存する前に,UNICODE から,UTF8 に変換するために 100 M.
200 M の連続領域が確保できないことが多いみたい.
::SaveUTF8 で,v_tstring (文字列の配列)形式のものを作成.
bool SaveUTF8 (LPCTSTR pathName,const v_tstring& strAry)
{
FILE* ofp = ::Open_File(pathName,_T(“wb”)) ;
for (size_t index=0 ; index<strAry.size() ; index++) {
tstring str = strAry[index] + _T(“\r\n”) ;
std::string u8Str = ::To_UTF8(str.c_str()) ;
v_char v_chr = ::To_v_char(u8Str) ;
::fwrite(&v_chr[0],sizeof(char),v_chr.size(),ofp) ;
}
::fclose(ofp) ;
return true ;
}
UNICODE から UTF8 への変換時間などはそれほど気にならない.100 MB のファイル 800,000 行で 10 秒程度.
幾つかの形式で保存した時のファイルサイズ
OBJ | AMF | DAE | X3D | PLY | AC | |
---|---|---|---|---|---|---|
サイズ MB | 111 | 368 | 85 | 29 | 191 | 57 |
比率 | 1.00 | 3.31 | 0.76 | 0.26 | 1.71 | 0.51 |