Как я могу уменьшить использование памяти в рамках сущности - PullRequest
4 голосов
/ 09 апреля 2011

я сделал одну CMS на .NET4 и Entity Framework.эта CMS в настоящее время начинает использоваться на сервере с общей памятью.

пул приложений имеет ограниченную память, поэтому пул приложений сбрасывается, когда мое приложение достигает предела памяти.После трассировки моего приложения я понимаю, что EF использует большую часть памяти.Есть ли способ уменьшить использование памяти EF или какие-либо настройки?

мой пример использования EF:

using BICT.Data;
//
public static List<Data.Log> GetList()
{
    using(CMSEntities cms = new CMSEntities())
    {
       return cms.Log.ToList<Data.Log>();
    }
}

я использую неправильный способ использования EF?

1 Ответ

2 голосов
/ 09 апреля 2011

Предполагая, что CMSEntities является вашим dbContext, вы используете его правильно, так как он реализует интерфейс IDisposable.

Единственное, что я хотел бы предложить, - это возвращать IQueryable вместо List, так как тогда вы получаете гибкость конвейерной обработки запросов Linq и , а затем , фактически обращающихся к базе данных. ( Ленивая загрузка ).

Если вам нужны все элементы, вы можете вызвать .ToList (), так что эта опция все еще доступна для вас.


EDIT

Например, скажем, у меня в базе данных есть таблица User, я создаю класс-оболочку для доступа к данным.

namespace Data.Repositories
{
    public class UserRepository : IDisposable
    {
        ColegioDBV2Entities db = new ColegioDBV2Entities();

        public IQueryable<User> FindAllUsers()
        {
            return db.Users;
        }    

        public void Dispose()
        {
            db.Dispose();
        }
    }
}

И когда я хочу получить доступ к данным, я делаю это через класс репозитория:

using (UserRepository repo = new UserRepository())
{
    var result = repo.FindAllUsers().Where(u => u.Username == txtUsername.Text && u.Password == txtPassword.Text);                    
}

Как только вы покидаете этот блок, ваш контекст автоматически закрывается и освобождается.

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