การทดสอบประสิทธิภาพ (ความเร็ว) บางรายการสรุปตัวเลือกต่าง ๆ ไม่ใช่ว่าสำคัญจริงๆ #microoptimization (โดยใช้ส่วนขยาย linqpad )
ตัวเลือก
void Main()
{
object objValue = null;
test(objValue);
string strValue = null;
test(strValue);
}
void test(string value) {
new Perf<string> {
{ "coallesce", n => (value ?? string.Empty).ToString() },
{ "nullcheck", n => value == null ? string.Empty : value.ToString() },
{ "str.Format", n => string.Format("{0}", value) },
{ "str.Concat", n => string.Concat(value) },
{ "string +", n => "" + value },
{ "Convert", n => Convert.ToString(value) },
}.Vs();
}
void test(object value) {
new Perf<string> {
{ "coallesce", n => (value ?? string.Empty).ToString() },
{ "nullcheck", n => value == null ? string.Empty : value.ToString() },
{ "str.Format", n => string.Format("{0}", value) },
{ "str.Concat", n => string.Concat(value) },
{ "string +", n => "" + value },
{ "Convert", n => Convert.ToString(value) },
}.Vs();
}
อาจเป็นสิ่งสำคัญที่จะชี้ให้เห็นว่าConvert.ToString(...)
จะคงสตริงว่างไว้
ผล
วัตถุ
- nullcheck 1.00x 1221 เห็บที่ผ่านไป (0.1221 ms) [ใน 10K reps, 1.221E-05 ms ต่อ]
- Coallesce 1.14x 1387 เห็บที่ผ่านไป (0.1387 ms) [ใน 10K reps, 1.387E-05 ms ต่อ]
- สตริง + 1.16x 1415 เห็บที่ผ่านไป (0.1415 ms) [ใน 10K reps, 1.415E-05 ms ต่อ]
- str.Concat 1.16x 1420 ขีดที่ผ่านไป (0.142 ms) [ใน 10K reps, 1.42E-05 ms ต่อ]
- แปลง 1.58x 1931 เห็บที่ผ่านไป (0.1931 ms) [ใน 10K reps, 1.931E-05 ms ต่อ]
- str.Format 5.45x 6655 เห็บที่ผ่านไป (0.6655 ms) [ใน 10K reps, 6.655E-05 ms ต่อ]
สตริง
- nullcheck 1.00x 1190 เห็บที่ผ่านไป (0.119 ms) [ใน 10K reps, 1.19E-05 ms ต่อ]
- แปลง 1.01x 1200 เห็บที่ผ่านไป (0.12 มิลลิวินาที) [ใน 10K reps, 1.2E-05 ms ต่อ]
- สตริง + 1.04x 1239 เห็บที่ผ่านไป (0.1239 ms) [ใน 10K reps, 1.239E-05 ms ต่อ]
- Coallesce 1.20x 1423 เห็บที่ผ่านไป (0.1423 ms) [ใน 10K reps, 1.423E-05 ms ต่อ]
- str.Concat 4.57x 5444 เห็บผ่านไปแล้ว (0.5444 ms) [ใน 10K reps, 5.444E-05 ms ต่อ]
- str.Format 5.67x 6750 เห็บที่ผ่านไป (0.675 มิลลิวินาที) [ใน 10K reps, 6.75E-05 ms ต่อ]