Как я должен хранить всю базу данных в памяти, используя LINQ - PullRequest
1 голос
/ 01 апреля 2011

Прямо сейчас у меня в приложении ASP.NET есть статический класс под названием юниверс. Вселенная содержит планеты и всевозможные другие небесные тела. Когда приложение запустится, я хочу, чтобы приложение загрузило большую часть базы данных в память, поэтому потребуется очень мало обращений к базе данных для срока службы приложения.

Прямо сейчас у меня есть несколько списков внутри статического класса, называемого юниверсом, и я просто выбираю все данные из каждой таблицы и добавляю их в эти списки соответствующих им объектов LINQ. Оттуда я расширяюсь на объекты LINQ, используя частичные классы. Однако я чувствую, что должен быть лучший способ сделать это. Извините заранее, если это глупый вопрос.

public static List<ss_planets> planets = new List<ss_planets>();
public static List<ss_moons> moons = new List<ss_moons>();
public static void create_the_universe()
{
        ssDataContext db = new ssDataContext();

        var p = (from s in db.ss_planets select s);
        foreach (ss_planets pl in p)
        {
            planets.Add(pl);
        }

        var m = (from m in db.ss_moons select m);
        foreach (ss_moons mo in p)
        {
            moons.Add(mo);
        }
}

Ответы [ 3 ]

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

Вы можете использовать LoadWith для извлечения всех необходимых таблиц в память.

1 голос
/ 01 апреля 2011

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

Вы также можете подумать о настройке

ssDataContext.ObjectTrackingEnabled = false;

и должны обернуть создание контекста в using -выражение, которое дает вам:

using (ssDataContext db = new ssDataContext())
{
    ssDataContext.ObjectTrackingEnabled = false;

    // do your thing here
}

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

0 голосов
/ 01 апреля 2011

Почему бы не использовать базу данных в памяти?

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

...