Есть несколько вещей, которые вы можете сделать, не нарушая рабочий процесс пользователя и не получая огромного снижения производительности.
Теперь моя аппликация расходует около
От 30 до 50 МБ памяти. Это справедливо?
Это нормально для приложения .net. Вы сразу заметите, что объем памяти сразу после запуска приложения не намного меньше.
Или я должен выполнить свой поиск в
вместо базы данных? [но я не могу
компромисс по скорости]
Повторный запрос к базе данных уместен только в том случае, если вы не смогли загрузить данные за один шаг. Всякий раз, когда пользователь вводит в поле, вы хотите убедиться, что вы не запрашиваете базу данных при каждом изменении критериев поиска, а скорее используете короткий таймер, который ждет секунду или около того, прежде чем запрашивать базу данных с новым критерии. При запросе базы данных это также может помочь уменьшить количество записей, отображаемых с помощью разбиения на страницы или отложенной загрузки остальных данных, когда пользователь начинает прокручивать. Правильная индексация базы данных поможет вам значительно снизить скорость выполнения такого запроса.
Однако, если вы можете сохранить весь список в памяти (скажем, он не слишком велик, чтобы запросить его из базы данных за один шаг, или вам все равно нужно показать весь список пользователю), было бы лучше сохранить нетронутая копия списка и копия этого списка, которую вы можете постепенно фильтровать. Поэтому вам необходимо проверить, являются ли ваши критерии поиска подмножеством предыдущих критериев поиска. Если это так, вы можете отфильтровать уже отфильтрованный список, иначе вам нужно отфильтровать нетронутый список. Это может быть эффективно реализовано с использованием оператора LINQ .Where()
и, если необходимо, с помощью PLINQ. .Where()
показывает O (n) время AFAIK.
Это можно улучшить, используя HashSet с соответствующим ключом.