.net 組み込みメソッドを使用したパフォーマンスの問題の最も単純な例である以下のコードについて、ご意見をお聞かせください。オンライン チュートリアルで強く推奨されています。
public void stringFormatVsConcatShowResults()
{
float timeFormat = 0, timeConcat = 0;
for (int counter = 0; counter < 10; i++)
{
if (counter % 2 == 0)
timeFormat += TestStrFormat(1000000, true);
else timeConcat += TestStrFormat(1000000);
}
if (timeFormat > timeConcat)
{
float precWonBy = (timeConcat / timeFormat) * 100;
int prcfractionalPart = new Version(precWonBy.ToString()).Major;
MessageBox.Show("The fstest (by " + prcfractionalPart + " %)is Concat");
}
else
{
float precWonBy = (timeConcat / timeFormat) * 100;
int precfractionalPart = new Version(precWonBy.ToString()).Major;
MessageBox.Show("The fstest (by" + precfractionalPart + " %)is string.Format()");
}
}
public int TestStrFormat(int iterate, bool WstringFormat=false)
{
string testStr = string.Empty, Enewline = Environment.NewLine;
const string header = "its iteration No': ", sign = " !";
Stopwatch swStrFrm = new Stopwatch();
swStrFrm.Start();
if (WstringFormat)
{
for (int counter = 0; counter < iterate; i++)
{
testStr = string.Format("--{0}{1}{2}--{3}", header, counter, sign, Enewline);
}
}
else
{
for (int counter = 0; counter < iterate; i++)
{
testStr = "--its iteration No': " + counter + " !--" + Enewline ;
}
}
swStrFrm.Stop();
return Convert.ToInt32(swStrFrm.ElapsedTicks);
}
何を選択しますか。また、このパフォーマンスの問題に注意してください。
これは単純な例にすぎません。
画面をビットマップにキャプチャしたり、画像をバイト[]に変換したりするなど、多くの方法があります...
私はソフトウェア開発に不慣れなので(4か月 - 独学)、複数のジャンクションでこれらの状況に遭遇しました。ここでは、決定する必要があるため、どの方法を使用するかを選択するにはどうすればよいですか?...アプリケーションで最大のパフォーマンスを発揮することを選択したとき、またはそれ(C#)の意図がそもそもパフォーマンスではなかったときはいつでも反逆します。
ただ電話stringFormatVsConcatShowResults()
して、私が話していることを自分の目で確かめてください
- 再編集
その後、長い文字列を使用すると、次のようになります。
public int TestStrWStrBld(int iterate)
{
StringBuilder sb = new StringBuilder();
const string header = "its iteration No': ", sign = " !";
Stopwatch swStrFrm = new Stopwatch();
swStrFrm.Start();
for (int i = 0; i < iterate; i++)
{
sb.Append(header).Append(i).Append(sign).Append(Environment.NewLine);
}
swStrFrm.Stop();
return Convert.ToInt32(swStrFrm.ElapsedTicks);
}
StringBuilder が 600% 以上高速化したのは今でした
私の心を開いてくれてありがとう、これから...私は正しい実装を探し続けます。
- ReEdit2 または小さい文字列の場合: 文字列と比較
Str = "a" + "b" + "c";
以下は800%高速です!!
public int TestStrWStrBld(int iterate)
{
StringBuilder sb = new StringBuilder();
const string header = "its iteration No': ", sign = " !";
string str = string.Empty;
Stopwatch swStrFrm = new Stopwatch();
swStrFrm.Start();
for (int i = 0; i < iterate; i++)
{
str= String.Concat(header, i.ToString(), sign,Environment.NewLine);
}
swStrFrm.Stop();
return Convert.ToInt32(swStrFrm.ElapsedTicks);
}
したがって、正しい方法は String.Concat(string1, string2, etc...) を使用することだと思います