C++相談室 part10
■ このスレッドは過去ログ倉庫に格納されています
0039デフォルトの名無しさん
NGNGVS.netのC++でDLLとMFCでのGUI開発を行っています。
1.2MBほどの2つ項目があるタブ区切りテキスト
yoshida<TAB>吉田<TAB> 12
yoshimura<TAB>吉村<TAB> 20
.
.
をクラス
class WordFromDic{
string Roma;
vector<string> Kana;
vector<int> Freq;
};
に読み込む処理を行っています
読み込む関数は以下のとおりです
MYDLL_API void ReadWordDictionary(char *dic){
::ifstream WordDic(dic);
char buf[256];
while(WordDic.getline(buf,sizeof(buf))){
char *p1 = strtok(buf,"\t");
char *p2 = strtok(NULL,"\t");
char *p3 = strtok(NULL,"\t");
if (!HashDic[p1]){
WordFromDic *temp = new WordFromDic(p1,p2,p3);
HashDic[p1] = temp;
}
else {
HashDic[p1]->AddWord(p1,p2,p3);
}
}
}
ところがこれが偉く時間がかかってしまうのです。だいたい軌道までに30秒くらいを要する感じです
clock()でこの処理の時間をはかってみたところ95600という数値が出ました。
これをもっと早くする方法はないでしょうか?
MFCでSTLを使うのはあまりよくないのかなーとも思ったのですが。
さらにメモリの開放時にもやたら時間がかかってしまいます(10秒くらい)
MYDLL_API void DeleteWordDictionary(){
for(map<string, class WordFromDic*,less<string> >::iterator i=HashDic.begin();
i!=HashDic.end();i++)
{
delete i->second;
}
}
この問題についてどなたかアドバイスをいただければと思います
■ このスレッドは過去ログ倉庫に格納されています