Как избежать распределения кучи при вызове методов интерфейса на нескольких типах структуры в общем списке? (C#)C#

Место общения программистов C#
Ответить
Anonymous
 Как избежать распределения кучи при вызове методов интерфейса на нескольких типах структуры в общем списке? (C#)

Сообщение Anonymous »

Я пишу программу, которая очень чувствительна к сбору мусора, поэтому я стараюсь избегать выделения на кучу после инициализации. Это связано с тем, что поддерживается структурой (, thing2 и т. Д.).
Я хочу избежать этого распределения, но я также не хочу указывать несколько списков (один на тип структуры). Есть ли способ сделать это чисто и эффективно? < /P>
interface IThing
{
void DoThing();
}

struct Thing1 : IThing
{
public void DoThing(){}
}

struct Thing2 : IThing
{
public void DoThing(){}
}

List things;

void Initialize()
{
things = new List();

things.Add(new Thing1());
things.Add(new Thing2());
}

void Run()
{
foreach(IThing thing in things)
{
thing.DoThing(); //this allocates to the heap due underlying type being a struct
}
}
< /code>
Вы можете увидеть на изображении ниже, что существуют распределения памяти из строки 38.
< /p>
Другой пример с аталяциями памяти в линейке 43. < /p>
Описание. src = "https://i.sstatic.net/ginwrtqe.png"/>

Подробнее здесь: https://stackoverflow.com/questions/797 ... e-struct-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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