3

私は Visual Studio 2010 を使用して、ベクトルを宣言し、6 つの文字列メンバー変数を持つ 1500 近くのレコードに対して push_back を実行する小さなプロジェクトを構築しています。Employee のインスタンスは、cpp ファイルにハードコードされた文字列リテラルを渡すことによって作成されます。

サンプルコード:

struct Employee{

Employee(string && name, string && id, string && ssn, string && location, string && phone): name(move(name)), id(move(id)), ssn(move(ssn)), location(move(location)), phone(move(phone)){}

string name;
string id;
string ssn;
string location;
string phone;
};

int main (int argc, char *args[]){
vector<Employee> ec;
ec.push_back(Employee(string("Sam"), string("sam"), string("215559999"), string("Seattle"), string("2145482058")));
ec.push_back(Employee(string("Adams"), string("ada"), string("124558888"), string("Pittsburgh"), string("6545482058")));
/*push_back 1500 records*/
}

このコードは、デバッグ モードで正常にコンパイルおよびリンクされます。リリース モードでは、コードは正常にコンパイルされますが、リンクには非常に時間がかかります。出力コンソールの最後の 2 行は
1>Link:
1> Generating code です

PS: 最適化 (プロパティ > C/C++ > 最適化) を無効にすると、リリースの既定値である "Maximize Speed /O2" から問題が解決しますが、他に方法がない場合を除き、これは考慮したくないことです。

編集: ファイル IO は、処理にわずかな遅延が追加されるため、特にこのコードが数百のジョブで一度に開始されるため、快適なものではありません。したがって、これが 30x4000 の静的テーブルであることを考えると、メモリ内テーブルを持つことに絞り込み、io による読み込みの遅延を回避しました。ハードコーディングすると、コードがテキスト ファイルのように見えることは間違いありませんが、パフォーマンスを求めています。それで、Visual Studioが文字列リテラルのハードコーディングを受け入れ、それらを高速にリンクする方法はありますか. そうでない場合は、file io アプローチに戻ります。

4

1 に答える 1