C#の単純なパフォーマンスの向上
1、String Split()
- C#には、10個の
Split()
オーバーロードされたメソッドがあります
- 一般的な使用法
static void SplitChar()
{
var str = "Hello|World";
// 实例化秒表对象
var s1 = new Stopwatch();
s1.Start();
_ = str.Split('|');
Console.WriteLine($"SplitChar ElapsedTicks:{s1.ElapsedTicks}");
}
- 最適化された書き込み文字の配列を作成し、それらをパラメーターとして
Split()
メソッドに渡します
static void SplitCharArray()
{
var str = "Hello|World";
// 实例化秒表对象
var s1 = new Stopwatch();
s1.Start();
_ = str.Split(new char[] {
'|' });
Console.WriteLine($"SplitCharArray ElapsedTicks:{s1.ElapsedTicks}");
}
テスト結果、文字配列を使用する効率がはるかに高いことは明らかです
2、String Equals()
str
変数の値が文字列と等しいかどうかを確認します。“Akshay”
理由がわからないstr
場合は、値が次のようになります。null
static void Equals1()
{
try
{
string str = null;
Console.WriteLine(str.Equals("Hello World") ? "IF" : "ELSE");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
上記の書き込み、私たちのプログラムはヌル参照異常な
- この方法では使用されていないが、方法が使用さ
str
Equals()
“Akshay”
Equals()
static void Equals2()
{
try
{
string str = null;
Console.WriteLine("Hello World".Equals(str) ? "IF" : "ELSE");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
私たちの考え方を変えた後、私たちのプログラムは私たちが定義した結果を出力します
3、文字列の追加()
- ベンチマーク文字列補間、文字列フォーマット、文字列連結、および文字列ビルダー
static void AddStrings()
{
string str = "Hello";
string str1 = "World";
var s1 = new Stopwatch();
//String Interploation
s1.Start();
_ = $"{str} {str1} is an author";
Console.WriteLine($"String Interpolation {s1.ElapsedTicks}");
//String Format
s1.Restart();
_ = string.Format("{0},{1} is an author", str, str1);
Console.WriteLine($"String Format {s1.ElapsedTicks}");
//String Concat
s1.Restart();
_ = string.Concat(str, str1, " is an auther");
Console.WriteLine($"String Concat {s1.ElapsedTicks}");
//StringBuilder
s1.Restart();
StringBuilder sb = new StringBuilder();
sb.Append(str);
sb.Append(str1);
sb.Append(" is an auther");
_ = sb.ToString();
Console.WriteLine($"StringBuilder {s1.ElapsedTicks}");
}
2本の弦をつなぎ合わせる4つの異なる方法string.Concat()
、使用時に4つの方法が発生しました
テスト結果は、string.Concat()
文字列連結方法の使用を示唆しています
4、List.Count()対List.Any()対List.Count
- 繰り返す前に、
List.Count()
メソッドを使用して、ライブラリにデータがあるかどうか、またはデータが空かどうかを確認します。ここでList.Count()
、List.Any()
メソッドの実行時間を比較してください
static void ListCountAndAny()
{
var watch = new Stopwatch();
var strs = new List<string>()
{
"Hello",
"World",
"CSahrp",
"Years"
};
watch.Start();
if (strs.Count() > 0) {
}
Console.WriteLine($"List.Count() {watch.Elapsed}");
watch.Restart();
if (strs.Any()) {
}
Console.WriteLine($"List.Any() {watch.Elapsed}");
watch.Restart();
if (strs.Count > 0) {
}
Console.WriteLine($"List.Count {watch.Elapsed}");
}
Count()
メソッドはメソッドよりもAny()
時間を節約します。ただし、Count
属性を直接使用する方が時間がかかりません
5、配列の長さ
- 開発者はforループの
Array.Length
反復条件として使用する傾向がありますが、知っておく必要があるのは、反復ごとにLength
属性が呼び出されることです。それを変数に格納し、その変数を反復条件として使用することをお勧めします
配列の長さは、反復条件として直接使用されます
static void ArrayLengthInLoop()
{
var watch = new Stopwatch();
string[] names = new[] {
"Akshay", "Patel", "Panth" };
watch.Start();
for (int i = 0; i < names.Length; i++) {
}
Console.WriteLine($"Array.Length in the Loop: {watch.Elapsed}");
}
変数に格納され、変数を反復条件として使用する配列の長さ
static void ArrayLengthInVariable()
{
var watch = new Stopwatch();
string[] names = new[] {
"Akshay", "Patel", "Panth" };
watch.Start();
int k = names.Length;
for (int i = 0; i < k; i++) {
}
Console.WriteLine($"Array.Length in a Variable: {watch.Elapsed}");
}
初めての場合を除いて、配列の長さを取得する時間を節約し、ある程度の効率を向上させます
テスト結果に特定のエラーがあります。参照してください。