Использование памяти в приложении веб-службы EF 1 растет с каждым вызовом - проблемы с кешем запросов? - PullRequest
3 голосов
/ 13 октября 2011

надеюсь, что некоторые из вас, умные люди, могут помочь мне здесь!

У нас есть приложение веб-службы ASP.NET, использующее Entity Framework 1 и EFPocoAdapter. Использование памяти пула приложений, в котором запущен этот веб-сервис, растет при каждом вызове веб-сервиса. В настоящее время мы отслеживаем его использование памяти и, как только он начинает превышать 1 ГБ, мы перерабатываем пул приложений для освобождения памяти.

Мы создаем экземпляр контекста объекта в каждом веб-методе в операторе 'using', чтобы не оставлять контексты открытого объекта (наблюдается с помощью efprof).

Итак, яЯ использовал профилировщик памяти Ants 7 для отслеживания того, что происходит, и после первого вызова веб-службы (на этом этапе среда EF создает свое представление и т. д.) я сделал снимок.Затем сделайте тот же звонок и сделайте еще один снимок. Муравьи показывают, что новые объекты, созданные со времени последнего снимка, в значительной степени связаны с System.Data.Common.QueryCache.QueryCacheManager.

Я знаю, что цель кэша - повысить производительность, но в нашем случае я думаю, что нам НЕ нужно кэшировать каждый план запроса , поскольку вероятность повторения этих вызовов минимальна из-за характера нашего основного приложения / бизнеса.

Итак, мойвопрос ..... есть ли способ отключить это кеширование , или я лаю здесь не то дерево и происходит что-то еще, о чем я не знаю?

IЯ искал ответ на этот вопрос в Интернете, и все, что я могу найти, - это свойство MergeOption, которое, похоже, больше связано с отслеживанием объектов для повышения скорости и производительности.

1 Ответ

0 голосов
/ 13 декабря 2011

Если вы не изменяете данные, просто выберите их, вы можете просто отключить отслеживание изменения объекта:

datacontext.ObjectTrackingEnabled = false;

У меня сработало в аналогичной ситуации с Linq2SQL.

...