Вопрос

Я пытаюсь сделать сравнение между дозвуковыми 3, набора данных и структурой набора данных. Причина, почему для моей стажировки я должен прояснить мой выбор.До сих пор я знаю, что наборы данных работает следующим образом с получением данных:

  1. db в память
  2. Запрос на БД в памяти
  3. Результат в результате запроса

    Framework Entity (.NET версия 3.5) делает это следующим образом. (Используя .NET 3.5, потому что он должен работать на SharePoint 2010, и это только поддерживает .NET 3.5 из-за версии CLR)

    1. запрос на БД Результат
    2. вернулся на объекты в памяти
    3. Результат возвращен

      До сих пор я не нашел схемы для дозвуковых 3, как они это делают. Я надеюсь, что один из вас может помочь мне

Это было полезно?

Решение

Это полностью зависит от стратегии, которую вы используете (ActiveReCord / linqtemplates / simplepositor)

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

  • linqtemplates: Намного меньше использование памяти, у вас есть экземпляр вашей БД, который содержит схему каждой таблицы и чистые данные.

  • SimplerePository Даже меньше, поскольку экземпляр репо, ничего не знает о вашей базе данных. Это почти только использование чистых данных в памяти.

    Я бы предложил использовать как шаблоны ActiveRecord и Linq. LINQ для запроса больших списков и ActiveRecord для редактирования одной записи или небольших списков (<100 записей).

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

    <Сильный> Пример:

    var db = new NorthwindDb();
    
    // does not hit the database (just an expression)
    // since we only need ProductId and ProductName in this example,
    // there is no need to pull the entiry Product from the database.
    var query = from p in db.Products
                where p.CategoryId == 5
                select new {p.ProductId, p.ProductName };
    
    // executes: SELECT COUNT(*) FROM products WHERE categoryid = 5;
    var count = query.Count();
    
    // does not execute anything
    var top10 = query.Take(10);
    
    // executes: SELECT productid, productname
    //           FROM products WHERE categoryid = 5 LIMIT 10
    // LIMIT = MySQL paging, don't know how to write that for SQLServer
    // p in this example is not a product, but an anonymous type with
    // only two properties (ProductName and ProductId)
    foreach (var p in top10);
        Console.WriteLine("ProductId {0} Name {1}", p.ProductId, p.ProductName);
    
    .

    <Сильное> Обновление: Я не знаю, какое приложение вы разрабатываете, но если вам нужно отображать данные в DataGrid, я бы предложил использовать DEVEXPRESS XTRAGRID (доступно для WinForms, WPF / Silverlight и ASP.NET), который имеет ServerMode, который работает довольно хорошо С дозвуковыми linqtemplates (поскольку он может быть связан с iQuerable, и сам обрабатывает пейджинг / сортировку / фильтрацию на iQuerable и требуется только несколько записей одновременно. Это значительно снижает след памяти и производительность нашего приложения нашего приложения (которая загрузила кучу записей в DataTable).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top