وبگاه شخصی حسن فتحی

۲ مطلب در اسفند ۱۳۹۴ ثبت شده است

IEnumerable VS IQueryable in .Net Framework

دو عنصر بالا از شی ها یا به عبارتی نوع داده های (Data Type) دات نت هستند؛ ما از IEnumerable  و IQueryable برای دستکاری داده استفاده می کنیم (LINQ). در دات نت IEnumerable  توسط IQueryable  به ارث برده می شود به عبارتی دیگر IQueryable  همه ویژگی های IEnumerable  دارد و علاوه بر آن ها ویژگی های منحصر به فرد خود را نیز دار؛ هر دوی این دو شی برای بازیابی و دستکاری داده های موجود در پایگاه داده (Database) به کار می روند. اجازه دهید ویژگی های هر کدام و برتری آنها نسبت به هم را نام ببرم؛ که نقش مهمی در بالا بردن سرعت و کارایی پرس و جوهای (LINQ) دارند.
دو عنصر بالا شباهت زیادی به هم دارند و همه برنامه نویسان از هر دو آنها استفاده می کنند ولی از لحاض کارایی در سناریوهای مختلف متفاوت عمل می کنند.

IEnumerable  :
  • فضای نام (System.Collections)
  • بهترین مورد استفاده آن در بازیابی داده از شی های موجود در حافظه (in-Memory Objects) مانند لیست، آرایه و ... است 
  • موقعی که بازیابی داده از پایگاه داده انجام می شود IEnumerable  پرس و جو را سمت سرور اجرا کرده و داده ها را در شی های in-Memory در سمت کلاینت بارگذاری کرده و بعد عمل فیلترینگ را انجام می دهد
  • بهترین و مناسب ترین برای پرس و جوهای LINQ to Object و LINQ to XML
  • پشتیبانی از (deferred execution)
  • عدم پشتیبانی از پرس و جوهای سفارشی (custom query)
  • عدم پشتیبانی از (lazy loading) و نامناسب برای صفحه بندی (paging)
IQueryable :
  • فضای نام (System.Linq)
  • بهترین مورد استفاده آن در بازیابی داده از شی های موجود در خارج حافظه (out-Memory Objects) مانند پایگاه داده ها، سرویس ها و ... است 
  • موقعی که بازیابی داده از پایگاه داده انجام می شود IQueryable پرس و جو را سمت سرور با انجام  عمل فیلترینگ اجرا می کند
  • بهترین و مناسب ترین برای پرس و جوهای LINQ to SQL
  • پشتیبانی از (deferred execution)
  • پشتیبانی از پرس و جوهای سفارشی (custom query) با استفاده از CreateQuery و Execute methods.
  • پشتیبانی از (lazy loading) و مناسب برای صفحه بندی (paging)
مثال :
IEnumerable  :
  1. MyDataContext db = new MyDataContext ();
  2. IEnumerable<Employee> list = db.Employees.Where(p => p.Name.StartsWith("S"));
  3. list = list.Take<Employee>(10);
پرس و جوی تولید شده :
  1. SELECT [t0].[EmpID], [t0].[EmpName], [t0].[Salary] FROM [Employee] AS [t0]
  2. WHERE [t0].[EmpName] LIKE @p0
توجه : اجرای پرس و جو سمت سرور (SQL SERVER) و فیلتر کردن آن سمت کلاینت توسط شی موجود در حافظه کلاینت

IQueryable :
  1. MyDataContext db = new MyDataContext ();
  2. IQueryable<Employee> list = db.Employees.Where(p => p.Name.StartsWith("S"));
  3. list = list.Take<Employee>(10);
پرس و جوی تولید شده :
  1. SELECT TOP 10 [t0].[EmpID], [t0].[EmpName], [t0].[Salary] FROM [Employee] AS [t0]
  2. WHERE [t0].[EmpName] LIKE @p0
توجه : اجرای پرس و جو سمت سرور (SQL SERVER) و فیلتر کردن آن در همان سمت
۱۵ اسفند ۹۴ ، ۱۰:۳۶ ۱ نظر موافقین ۱ مخالفین ۰
حسن فتحی

روش یا قانون 15 دقیقه

این قانون رو هممون میدونیم و بدیهیه؛ و تقریبا واسه حداکثر مردم هم اثبات شدس خب معلومه که انجام دادنش هم به ظاهر آسونه ولی هممونم میدونیم که خیلی سخته ... 

ولی ارزش تلاش برای انجامش رو داره تو هر زمینه ای؛ حداقل همه میتونن تلاش کنن واسه انجامش و امکان موفقیتم هم تقریبا درصدش خیلی بالاس، من هدفم از این پست اشاره دوباره به این قانون و ترغیب شما برای انجام این روشه؛ امیدوارم که تاثیر گذار باشه.

این قانون به قدرت تغییرات کوچک اشاره دارد!

تکرار کارهایی کوچک نه تنها شخصیت انسان را می سازد بلکه شخصیت ملت ها را تعیین می کند.(ساموئل اسمایلز)

۱-اگر روزی ۱۵ دقیقه را صرف خودسازی کنید؛ در پایان یک سال تغییر ایجاد شده در خویش را به خوبی احساس خواهید کرد.

۲-اگر روزی ۱۵ دقیقه از کارهای بی اهمیت خویش بکاهید؛ ظرف چندسال جهالتمان تبدیل به خرد خواهد شد.

۳-اگر روزی ۱۵دقیقه رابه فراگیری زبان اختصاص دهید از هفته ای یک بار کلاس زبان رفتن بهتر است.

۴-اگر روزی ۱۵دقیقه را به پیاده روی سریع اختصاص دهید از هفته ای چند بار به باشگاه ورزشی رفتن ؛ نتیجه ی بهتری خواهید گرفت.

۵-اگر روزی ۱۵ دقیقه مطالعه وسلول های خاکستری خویش را درگیر کنید؛ به پیشرفت های عظیم یادگیری دست خواهید یافت…

زیبایی روش یا قانون ۱۵ دقیقه در این است که آن قدر کوتاهست که هیچ وقت به بهانه ی این که وقت ندارید آن را به تاخیر نمی اندازید.

۰۵ اسفند ۹۴ ، ۱۱:۵۷ ۰ نظر موافقین ۰ مخالفین ۰
حسن فتحی