ObjectContext, объекты и производительность загрузки - PullRequest
1 голос
/ 24 февраля 2011

Я пишу сервис RIA, который также предоставляется с использованием SOAP.Один из его методов должен читать данные из очень большой таблицы.

Сначала я делал что-то вроде:

public IQueryable<MyItem> GetMyItems()
{
    return this.ObjectContext.MyItems.Where(x => x.StartDate >= start && x.EndDate <= end);
}

Но потом я остановился, потому что беспокоился о производительности.

Насколько я понимаю, MyItemsis полностью загружен, а "Where" просто фильтрует элементы, которые были загружены при первом доступе к свойству MyItems.Поскольку у MyItems будет действительно много строк, я не думаю, что это правильный подход.

Я попытался немного погуглить вопрос, но никаких интересных результатов не получилось.

Итак, я подумал, что смогу создать новый экземпляр контекста внутри метода GetMyItems и выборочно загрузить MyItems.Что-то вроде:

 public IQueryable<MyItems> GetMyItems(string Username, DateTime Start, DateTime End)
    {
        using (MyEntities ctx = new MyEntities ())
        {
            var objQuery = ctx.CreateQuery<MyItems>(
                "SELECT * FROM MyItems WHERE Username = @Username AND Timestamp >= @Start AND Timestamp <= @End",
                new ObjectParameter("@Username", Username),
                new ObjectParameter("@Start", Start),
                new ObjectParameter("@End", End));

            return objQuery.AsQueryable();
        }
    }

Но я совсем не уверен, что это правильный способ сделать это.

Не могли бы вы помочь мне и указать правильный подход для этого?

Заранее спасибо, Ура, Джанлука.

1 Ответ

1 голос
/ 24 февраля 2011

Насколько я понимаю, MyItemsis полностью загружен, а "Where" просто фильтрует элементы, которые были загружены при первом доступе к свойству MyItems.

Нет. Это совершенно неправильно. Не исправляйте «проблемы с производительностью», пока они не появятся. Код, который у вас уже есть, вероятно, будет работать лучше, чем код, который вы предлагаете заменить его. Это, конечно, не будет вести себя так, как вы описываете. Но не верьте мне на слово. Используйте профилировщик производительности. Используйте SQL Profiler. И проверить!

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