Эта ссылка часто встречается в Google. Для дальнейшего использования я запустил короткую программу на C #, посвященную стоимости вызова функции, и получил ответ: «примерно в шесть раз дороже встроенного». Ниже приведены подробности, см. // Вывод внизу. ОБНОВЛЕНИЕ: чтобы лучше сравнить яблоки с яблоками, я изменил Class1.Method, чтобы он возвращал 'void', вот так: public void Method1 () {// return 0; }
Тем не менее, inline быстрее в 2 раза: inline (avg): 610 мс; вызов функции (в среднем): 1380 мс. Таким образом, ответ, обновленный, «около двух раз».
с использованием системы;
using System.Collections.Generic;
использование System.Linq;
используя System.Text;
используя System.Diagnostics;
namespace FunctionCallCost
{
Программа класса
{
static void Main (строка [] args)
{
Debug.WriteLine ( "STOP1");
int iMax = 100000000; // 100M
DateTime funcCall1 = DateTime.Now;
Секундомер sw = Stopwatch.StartNew ();
for (int i = 0; i < iMax; i++)
{
//gives about 5.94 seconds to do a billion loops,
// or 0.594 for 100M, about 6 times faster than
//the method call.
}
sw.Stop();
long iE = sw.ElapsedMilliseconds;
Debug.WriteLine("elapsed time of main function (ms) is: " + iE.ToString());
Debug.WriteLine("stop2");
Class1 myClass1 = new Class1();
Stopwatch sw2 = Stopwatch.StartNew();
int dummyI;
for (int ie = 0; ie < iMax; ie++)
{
dummyI = myClass1.Method1();
}
sw2.Stop();
long iE2 = sw2.ElapsedMilliseconds;
Debug.WriteLine("elapsed time of helper class function (ms) is: " + iE2.ToString());
Debug.WriteLine("Hi3");
}
}
// Класс 1 здесь
используя Систему;
using System.Collections.Generic;
использование System.Linq;
используя System.Text;
namespace FunctionCallCost
{
класс Class1
{
public Class1()
{
}
public int Method1 ()
{
return 0;
}
}
}
// Вывод:
STOP1
Истекшее время основной функции (мс): 595
STOP2
Истекшее время вспомогательной функции класса (мс): 3780
STOP1
Истекшее время основной функции (мс): 592
STOP2
Истекшее время функции класса помощника (мс): 4042
STOP1
Истекшее время основной функции (мс): 626
STOP2
Истекшее время функции класса помощника (мс): 3755