Недавно я начал работать над проектом, в котором многие ссылочные параметры передаются по ссылке. Я просмотрел большую часть кода, и большинство этих методов могли потерять параметр ref
. Несмотря на то, что код работает нормально, мне было интересно, какой может быть снижение производительности, если дважды разыменовывать каждый аргумент, а не просто передавать ссылку по значению.
Например, этот код:
public void EmptyList(ref List<string> test)
{
test.Clear();
}
VS это:
public void EmptyList(List<string> test)
{
test.Clear();
}
EDIT
Прочитав, что сказал Николас Кэри, я попробовал то же самое с кодом выше. Это была полученная сборка:
EmptyList(ref List<string> test)
00000028 mov eax,dword ptr [ebp-40h]
0000002b mov ecx,dword ptr [eax]
0000002d cmp dword ptr [ecx],ecx
0000002f call 719210C4
EmptyList(List<string> test)
00000028 mov ecx,dword ptr [ebp-40h]
0000002b cmp dword ptr [ecx],ecx
0000002d call 71920FD4