Лично я использую params
при написании функций, которые принимают ряд входных данных, предоставленных другим программистом (например, String.Format
), и IEnumerable
при написании функций, которые принимают список элементов данных компьютер (например, File.Write
).
Значения производительности незначительны. Беспокойство по поводу производительности тривиальной вещи, подобной этой, является точно , о котором говорил Дональд Кнут в известной цитате «преждевременная оптимизация - корень всего зла».
Тем не менее, спрашивающий, кажется, зациклен на этом, так что вот вам:
Результаты для 10 миллионов итераций:
params took 308 ms
list took 879 ms
Из этих результатов мы можем видеть, что массив params более чем в два раза быстрее. Тот простой факт, что вы можете вызвать любую из этих вещей десять миллионов раз в секунду, означает, что вы совершенно напрасно тратите свое время, беспокоясь об этом. Используйте все, что подходит вашему коду лучше всего.
Код для его тестирования (скомпилирован и запущен в режиме выпуска с использованием VS2008)
class Program
{
const int COUNT = 10000000;
static IEnumerable<string> m_value = null;
static void ParamsMethod(params string[] args)
{ m_value = args; } // do something with it to stop the compiler just optimizing this method away
static void ListMethod(List<string> args)
{ m_value = args; } // do SOMETHING with it to stop the compiler just optimizing this method away
static void Main(string[] args)
{
var s = new Stopwatch();
s.Start();
for (int i = 0; i < COUNT; ++i)
ParamsMethod("a", "b", "c");
Console.WriteLine("params took {0} ms", s.ElapsedMilliseconds);
s.Reset();
s.Start();
for (int i = 0; i < COUNT; ++i)
ListMethod(new List<string> { "a", "b", "c" });
Console.WriteLine("list took {0} ms", s.ElapsedMilliseconds);
}
}