Деякі (швидкісні) тести продуктивності, що підсумовують різні варіанти, не те, що це насправді має значення #microoptimization (з використанням розширення linqpad )
Параметри
void Main()
{
object objValue = null;
test(objValue);
string strValue = null;
test(strValue);
}
// Define other methods and classes here
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 мс) [у 10K повторень, 1,221E-05 мс за]
- вуглецевий 1.14x 1387 кліків минуло (0.1387 мс) [у 10K повторень, 1.387E-05 мс за]
- рядок + 1,16x 1415 тиків минуло (0,1415 мс) [у 10K повторень, 1,415E-05 мс за]
- str.Concat 1,16x 1420 кліків минуло (0,142 мс) [у 10K повторень, 1,42E-05 мс за]
- Перетворення 1,58x 1931 тиків, що минули (0,1931 мс) [у 10 тис. Повторень, 1,931E-05 мс за]
- str.Format 5.45x 6655 тиків минуло (0.6655 мс) [у 10K повторень, 6.655E-05 мс за]
Рядок
- nullcheck 1,00x 1190 тиків минуло (0,119 мс) [у 10K повторень, 1,19E-05 мс за]
- Перетворення 1.01x 1200 тиків, що минули (0,12 мс) [у 10K повторень, 1,2E-05 мс за]
- рядок + 1,04x 1239 тиків минули (0,1239 мс) [у 10K повторень, 1,239E-05 мс за]
- вуглес 1,20x 1423 тиків минуло (0,1423 мс) [у 10K повторень, 1,423E-05 мс за]
- str.Concat 4,57x 5444 минулих кліків (0,5444 мс) [у 10K повторень, 5,444E-05 мс за]
- str.Формат 5,67x 6750 минулих кліків (0,675 мс) [у 10K повторень, 6,75E-05 мс за]