0

私は T4 製のカスタムの小さな「ビュー」エンジンを持っています。基本的に、特別なディレクティブを含む「静的な」HTML ファイルを取得し、次のようなものを吐き出します。

StringBuilder output... 
output.Append("<html> my code blah");
if(MyParameter!=null){
  output.Append(MyParameter.ToString);
}
output.append("more code");
return output.ToString();

もちろん、それだけではありませんが、それが要点です。HTML ファイルを受け取り、昔ながらの C# クラスを生成します。

静的に型付けされたビューを使用できるため、この方法が本当に気に入っています。残念ながら、これは少し遅いようです。特に私の問題は、index複数のビューを含むblog entryビューがあることです。そのため、基本的に同じ基本的な文字列が構築され、提供されたパラメーターに基づいてあちこちにいくつかの異なるテキストが表示されます。

とにかく、このプロセスをスピードアップする方法があるかどうか疑問に思っています。これに対して StringBuilder よりも速いものは本当にありますか?

また、「汚れた」コードについて心配する必要はありません。私は T4 を使用してこれらのビュー クラスを生成するため、かなりハックっぽいコードを作成できますが、基本的には 1 回しか記述していないため、それほど重要ではありません。

4

2 に答える 2

2

StringBuilder の場合

  • 毎回新しいオブジェクトを作成する代わりに、StringBuilder オブジェクトを再利用します
  • StringBuilder の容量を最終文字列の最大サイズに設定します。

代替案

  • すべての可能な文字列のリストを作成し、パラメータ値に基づいてそれらから選択するだけです (可能な順列が多すぎない場合)

また

  • 文字列の構築が妨げになる可能性は低いため、コードをベンチマークしてください。1 つのコアで毎秒 30 万文字列を構築できます。
于 2012-07-12T18:17:18.407 に答える
0

作成する StringBuilder の容量を指定してください。これにより、複数のメモリ割り当てが回避されます。例:

var a = new StringBuilder(3000);

ここで、3000 は最終文字列の推定サイズです

于 2012-07-12T17:06:55.487 に答える