|
Programmer ASP.NET MVC C# |
Programming
|
||
Предыдущий | Следующий | |
Согедня постала потребность разобраться с такой ORM как Subsonic. До этого я использовал LinqToSQL и был доволен. Когда то я сравнивал Linq с другими способами работы с БД. Тогда мой выбор упал на Linq To SQL и я не ошибся. Сейчас для проверки я буду использовать стандартное ASP.Net Mvc приложение и базу данных Northwind. Работать я буду из SubSonic 3.0.0.4, на данный момент это последняя версия. Итак... 1) Всем известно, что LinqToSQL может работать только с базами данных от Microsoft, хотя они и обещают расширят свой арсенал, но сейчас это так. Subsonic такого ограничения нету. По правде говоря, даже не знаю на сколько это можно считать плюсом, по скольку я и так использую MSSQL. 2) Следующий более важны показатель это информация в интернете. По Linq ее значительно больше. И сама компания Microsoft будет пропагандировать свой продукт. 3) Теперь более технические дела (размер). Для работы из SubSonic в проект нужно добавит dll - SubSonic.Core.dll размер которой 280 КБ. В Linq библиотеку System.Data.Linq.dll добавлять не нужно она входит в Framework 3.5. Файлы с кодом (повторюсь БД - Northwind), которые генерит SubSonic занимают 368 КБ, у Linq они весят - 140 КБ. DLL файл проекта после этого увеличивается с 20,0 КБ до 160 КБ, если юзать SubSonic, и до 72,0 КБ если использовать LINQ. Этот параметр, как по мне, не значительно влияет на работу с ORM. 4) Удобство. Что в Linq и что в SubSonic классы для работы с БД создаются методом DragAndDrop. В LinqToSQL нужно из окна Server Explorer перенести данные (таблицы и хранимые процедуры) в файл *.dbml и вам отобразиться архитектура базы (таблицы и связи). В то время как в SubSonic нужно в папку Model добавить файлы (ActiveRecord.tt Context.tt StoredProcedures.tt Structs.tt), которые и сгенерируют классы, архитектура БД наглядно не отображается. Если в ходе работы нужно изменить структуру одной из таблиц, то в Linq можно визуально изменять только ее, не касаясь при этом других. А вот как это делать в SubSonic я не понял, нужно либо вручную править код, либо заново генерировать код. Вообщем в этом параметре LINQ to SQL лучше. 5) Скорость выборки. Будем работать из таблицею Products. Я внес в нее побольше данных, что бы считываение не было таким быстрым. Дл нала создаем объекты для работы с БД. NorthwindDB dbSubSonic = new NorthwindDB(); //SubSonic Код считывания LINQ, прошу обратить внимания цикл бежит 200 раз ==================== LINQ ======================== List<Product> products = new List<Product>(); ================================================= Было считано 135400 записей (классов Product) за 3,1366667 секунды Теперь код для SubSonic, прошу обратить внимания цикл бежит 20 раз =================== Subsonic ======================= List<Product> products = new List<Product>(); ================================================= Было считано 13540 записей (классов Product) за 24,261 секунды. Ужастный результат. Если изменить код products.AddRange(Product.All().ToList()); , то результат становиться только хуже 25.231 секунды. Вывод: однозначно LINQ 6) Запись. Проверяем работу Insert команды. Начнем с Linq to SQL, вот код: ==================== LINQ ======================== List<Product> products = new List<Product>(); ================================================= Код выполнлся 02.3730000 секунды, SQL Profiler отобразил такие запрсы. Тепер SubSonic. Каким образом вставлят сразу несколько записей, я так и не понял, по этому код имеет вид: =================== Subsonic ======================= List<Product> products = new List<Product>(); ================================================= Меня удивила скорость работы - 2.411 секунды, такая же как и в LINQ, SQL Profiler показывал вот такие запросы: Вывод: работают одинаково. 7) Обновление и удаление. Ожидайте..... Вывод. На данный момент мой выбор Linq to Sql, как-то Microsoft больше внушает доверия, нежели сторонние разработчики, которые могут заморозить свой проект и на этом все. |