c # COMDelegate :: Оптимизация DelegateConstruct - PullRequest
1 голос
/ 04 ноября 2011

Я использую несколько функций, таких как

    ICollection<ICache> caches = new HashSet<ICache>();

    ICollection<T> Matches<T>(string dependentVariableName)
    {
        return caches
            .Where(x => x.GetVariableName() == dependentVariableName)
            .Where(x => typeof(T).IsAssignableFrom(x.GetType()))
            .Select(x => (T) x)
            .ToList();
    }

в моем текущем классе дизайна. Они прекрасно работают с точки зрения архитектуры - где я могу произвольно добавлять объекты различных связанных типов (в данном случае ICaches) и извлекать их как коллекции конкретных типов.

Проблема в том, что инфраструктура здесь представляет собой научный пакет, и такого рода функции лежат на очень горячих путях кода, которые вызываются тысячи раз в течение нескольких минут. Результат:

Screen shot of profiling

и подобные функции являются основными потребителями COMDelegate :: DelegateConstruct.

Как вы можете видеть из относительного распределения выборки в%, это не прерыватель сделки, но было бы здорово уменьшить накладные расходы немного!

Заранее спасибо.

1 Ответ

0 голосов
/ 04 ноября 2011

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

2) не вызывать .ToList в конце ... просто вернуть IEnumerable.это поможет производительности.ToList нужно делать только тогда, когда вам действительно нужен список, в который можно позже добавить / удалить / отсортировать вещи.

3) У меня недостаточно контекста, но кажется, что этот метод можно устранить, используя dynamic ключевое слово

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