System.Array.IndexOf выделяет память - PullRequest
0 голосов
/ 08 сентября 2018

Я профилировал свой код и обнаружил, что System.Array.IndexOf выделяет немало памяти.Я пытался выяснить, как это происходит.

profiler image

public struct LRItem
{
    public ProductionRule Rule { get; } // ProductionRule is a class
    public int Position { get; }
}

// ...

public List<LRItem> Items { get; } = new List<LRItem>();

// ...

public bool Add(LRItem item)
{
    if (Items.Contains(item)) return false;

    Items.Add(item);
    return true;
}

Я предполагаю, что IndexOf вызывается Items.Contains потому что я не думаю, что Items.Add имеет какие-либо показатели для проверки бизнеса.Я попытался просмотреть справочный источник и .NET Core , но безрезультатно.Это ошибка в профилировщике VS?Эта функция фактически выделяет память?Могу ли я как-нибудь оптимизировать свой код?

1 Ответ

0 голосов
/ 08 сентября 2018

Ваш объект не является простым типом данных, таким как текст или число, поэтому проверка каждого элемента на наличие сложного объекта может быть убийцей памяти.

Например, если ваш объект содержит изображения, тексты, цифры и ...все данные должны обрабатываться на предмет сходства.

Я рекомендую вам НЕ использовать функции IndexOf или Contains, поскольку они могут сравнивать все данные в вашем объекте.

Просто сделайте это вручную, с помощью одного цикла foreach, и просто сравните ваши ключевые данные (идентификатор пользователя, идентификатор объекта, имя, семейство, дату, время или ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...