MulticastDelegate.getInvocationList () выделяется. Есть ли способ обойти это?C#

Место общения программистов C#
Anonymous
MulticastDelegate.getInvocationList () выделяется. Есть ли способ обойти это?

Сообщение Anonymous »

Можно ли вызвать многоадресный ход и обработать возвращаемое значение каждого прикрепленного обработчика без распределения памяти?

фон

В схеме нормальных вещей Delegate [] , выделяемый MulticastDelegate.getInvocationList () , незначителен. Однако в некоторых случаях важно минимизировать распределения. Например, во время игрового процесса в играх Xbox, работающих на компактной структуре, каждый распределенный 1 МБ вызовет коллекцию и неприятную кадре. Необходимо итерации полного списка вызовов, поскольку пользователь может вернуть False < /code>, чтобы отменить ответ на столкновение из любого из прикрепленных обработчиков (и вызывая делегат без использования getInvocationlist () < /code> просто возвращает результат последнего прикрепленного обработчика). < /P>

Для Ссылки, код FAMSER in oquide: p> p> p> P> p> p> p> p> p> p> p> p> p>

.// Report the collision to both participants. Track which ones returned true so we can
// later call OnSeparation if the contact is disabled for a different reason.
if (FixtureA.OnCollision != null)
foreach (OnCollisionEventHandler handler in FixtureA.OnCollision.GetInvocationList())
enabledA = handler(FixtureA, FixtureB, this) && enabledA;


Подробнее здесь: https://stackoverflow.com/questions/243 ... round-this

Вернуться в «C#»