تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 3 از 3 اولاول 123
نمايش نتايج 21 به 25 از 25

نام تاپيک: Message In N_Tier

  1. #21
    کاربر فعال تالار .Net senaps's Avatar
    تاريخ عضويت
    Jul 2008
    محل سكونت
    خونمون
    پست ها
    4,547

    پيش فرض

    بسیار ممنون....
    از همون نیاز به کش کردن می‌ترسیدم!!
    دوبار تو برنامه‌هام ازش استفاده کردم پشت دستم رو داغ کردم که تا تسلط کافی دیگه دیتابیس رو کش نکنم
    ولی این صفحه‌بندی رو نفهمیدم کاربردش دقیقا چی بود(غیر از خود صفحه‌بندی!!)....
    به هر صورت، بسیار ممنون دوست گرامی ایده‌ی خوبی دادید.... و به ظاهر، باید برم تو کار همون نوشتن یه سری dll....(اخرش کارم به اونجا میرسه که یه کتابخونه‌ی گنده مثل دات‌نت داشته باشم!! خودم میدونم )

    به شدت منتظر ادامه‌ی مطالبتون در این تاپیک هستم....

  2. #22
    پروفشنال
    تاريخ عضويت
    Nov 2007
    پست ها
    546

    پيش فرض

    بسم الله الرحمن الرحیم
    با سلام
    بینهایت از پاسخ جناب _H2_ سپاسگزارم.
    با اجازه ایشون پاسخ کوتاهی خدمت [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] عرض میکنم.
    ولی این صفحه‌بندی رو نفهمیدم کاربردش دقیقا چی بود(غیر از خود صفحه‌بندی!!)....
    یه نمونه کد که قبلا برای نمایش فاکتورها در برنامم ازش استفاده کردم براتون میگذارم تا ان شاالله مشکلتون مرتفع بشه. اصلا چیز خاصی نداره یه سرچ بزنید کلی نمونه پیدا میکنید.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یعنی وقتی به یک مکانیزم نیاز دارید با دید وسیع تری آن را طوری طراحی و کدنویسی کنید که برای پروژه های بعدی هم قابل استفاده باشد.
    همین مفهوم لایه بندی / پلاگین پذیری / DLL / OOP و... اگر درست انجام شود به تولید کدهای "قابل استفاده مجدد" (یکی از اصول پایه برنامه نویسی) کمک میکند.
    متاسفانه نتونستم برای صفحه بندی این کار رو انجام بدم و حالت کلی در نظر بگیرم.
    موفق باشید.
    Last edited by shotok; 28-12-2012 at 23:25.

  3. #23
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    ولی این صفحه‌بندی رو نفهمیدم کاربردش دقیقا چی بود
    گمانم منظورتان نحوه صفحه بندی و چگونگی ان نباشد.
    من چنین برداشت میکنم که منظورتان چرایی آن است. اینکه که چه ربطی به بحث داشت؟ و چه لزومی دارد؟
    اگر چنین است...

    هدف نهایی آن است که فرمان کاربر در حداقل زمان ممکن انجام شود.
    در واقع گمانم روی این توافق داشته باشیم که چکیده پست 19 شما نگرانی در خصوص بازدهی زمانی باشد.

    =====

    مثال: کاربر میخواهید Sort اطلاعات را براساس یک ستون تغییر دهد ...

    بالاخره یک جایی یک کدی باید این Sort مجدد را انجام دهد، این کاری است که بحرحال باید انجام شود، الگوریتم های Sort هم مشخص است، حالا یا SQLServer یا LINQ یا BindingSorurce و...

    بطور دقیق چه چیز باعث تفاوت سرعت پاسخ به کاربر خواهد شد؟!
    الگوریتم Sort که مشخص است و فقط کدهای مختلف آن را انجام میدهند نباید اینقدر تفاوت ایجاد کند.

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

    پس در واقع گلوگاه مشکل "دسترسی و انتقال" اطلاعات است.

    دقت کنید که وقتی از انتقال اطلاعات صحبت میکنیم این شامل
    - سریالی کردن اطلاعات در برنامه سرور
    - ارسال اطلاعات (بطور معمول تحت پروتکل TCP/IP) از هفت لایه شبکه
    - دریافت اطلاعات از هفت لایه شبکه
    - سرانجام دی-سریالی اطلاعات در برنامه کلاینت
    است.

    به عملیات های فوق باید ظرفیت انتقال و ترافیک شبکه را هم اضافه کرد، اغلب شبکه های داخلی شرکت های ما حدود 10MByte/S ظرفیت انتقال دارند. (که البته کافی است)
    یعنی وقتی سروری با یک کارت/کابل شبکه معمولی به سوییچری متصل است و همزمان 10 کلاینت درخواستی میدهند، حداکثر با سرعت 1MByte/S میتواند پاسخ هر یک را بدهد و...
    اگر روی همین سرور ISA/IIS/SQLServer و... هم نصب باشد، این عدد بین دسترسی به اینترنت و شبکه داخلی و بانک اطلاعاتی و... تقسیم خواهد شد.
    ((شاید بارها مشاهده کرده باشید که در شبکه های عادی شرکتی وقتی کسی فایل سنگینی دانلود میکند، حتی یک سایت معمولی برای دیگران به سختی باز میشود))

    البته لزومی ندارد خیلی نگران شوید!
    بر میگردیم سر بحث اصلی ...

    Cache با عدم انتقال مجدد اطلاعات و در دسترس نگاه داشتن آنها (در شرایط استفاده صحیح) میتواند بازدهی سرعتی را افزایش دهد.
    چون بطور خلاصه کمتر از ترافیک شبکه استفاده میکند، ضمن اینکه با عدم اشغال شدن پهنای باند شبکه در سرعت سایر کلاینت ها هم تاثیر خواهد داشت.

    Paging هم با انتقال کمتر اطلاعات میتواند بازدهی سرعتی را افزایش دهد.
    و همان ترتیب ترافیک شبکه را کمتر اشغال کند و در سرعت عمومی کل شبکه و حتی سایر کلاینت ها کمک کند.


    (((
    شرکت مان برای پروژه ای با یک بخش دولتی در حال مذاکره بودیم که یکی از جداول آنها نزدیک 100 میلیون رکورد داشت...
    البته سرورهای خوبی داشتند و مشکل RAM و CPU و... اصلاً نداشتند و آخر هم سر قیمت به توافق نرسیدیم ...
    بیخیال 100 میلیون...

    شما نمیتوانید یعنی منطقی نیست که 20000 رکورد را یکباره دانلود کنید و به کاربر نشان دهید، این کار حافظه و پردازش گر و شبکه را بسیار درگیر میکند و زمان پاسخ دهی برنامه تان بسیار کند خواهد کرد.
    )))

    موفق باشید.

  4. #24
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    کمی داریم از بحث اصلی دور میشویم ولی چاره ا نیست ...
    پست قبلی به "چرایی" صفحه بندی گذشت.
    در این پست کمی در خصوص "چگونگی" آن صحبت میکنیم

    متاسفانه نتونستم برای صفحه بندی این کار رو انجام بدم و حالت کلی در نظر بگیرم
    اصولاً خود ذات صفحه بندی در مبنای کامل و بزرگش یک Cache دیگر کوچک کنارش نیاز دارد.
    این کش مخصوص کمک به صفحه بندی است.

    برخی از موارد صفحه بندی روی خروجی خالص یک جدول انجام میشود.
    ولی در بسیاری موارد دیگر این خروجی یک نوعی SEARCH است.
    یا روی ForeginKey ها و Index ها و Text ها و...

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

    برای صفحه بندی باید خروجی های SEARCH کش شود.
    این کش میتواند فقط شامل PrimaryKey سطرهای یافته شده باشد. (سرعت دسترسی بالا و حافظه کم)
    در تحت وب و ASP.Net این کش میتواند دو جدول در دیتابیس باشد.

    در پروزه های exe میتوان بجای دیتابیس از یک List-int یا List-long و... هم استفاده کرد.

    یعنی باید جستجو را یکمرتبه انجام دهید و تک ستون های PrimaryKey این نتایج به داخل کش واکشی شوند.
    سپس بخش نمایش از این کش PrimaryKey برای صفحه بندی استفاده کند.

    اگر این کش با جداول خود دیتابیس باشد، هم میتوان عدد RowNumber را به خود جدول اضافه کرد و هم میتوان از دستور SQL آن استفاده کرد.

    اگر هم کش یک List/Array دات نتی باشد (برنامه Exe) که هم Count دارد و هم دسترسی تصادفی دارد و گمانم استفاده از آن نیاز به تشریح هم ندارد.
    این موارد را به راحتی میتوان در قالب کدهای مشترک تجمیع کرد.
    بدلیل مشکلات زمانی ، نمیتوانم قولی دهم، ولی تلاش میکنیم اگر فرصتی شد روی ارائه یک نمونه کد بسیار ساده صفحه بندی به روش بالا زمان بگذارم...

  5. #25
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض رویداد گرایی

    سلام
    متاسفانه به علت مشغله کاری کمی زمان بر شد ولی به بحث اصلی ادامه میدهیم...

    رویداد گرایی
    هر کلاسی از هر وراثت ، واسط ، شرایط و... میتواند رویداد داشته باشد و اتفاقات و وقایع خود را منتشر کند.
    (((
    پیاده سازی زیر بنایی یک رویداد در واقع یک مجموعه اشاره گر توابع است.
    کدی که قصد گوش دادن به رویداد و مطلع شدن از آن اتفاق را دارد اشاره گر یک تابع نماینده را به فهرست رویداد اضافه میکند.
    کلاس اصلی هر وقت تشخیص داد با به جریان انداختن رویداد تمام توابع نماینده را اجرا میکند
    )))


    هر رویداد یک "امضا تابعی" خاص خود دارد.
    (امضا تابع: نوع و ترتیب پارامترهای ورودی یک تابع)

    ==============

    مثال عملی برای درک بهتر کاربرد وسیع این امکان:

    به عنوان نمونه حتماً در WinForm از رویداد Click دکمه ها با امضای object, EventArgs استفاده کرده اید.
    این رویداد را کلاس Button هرگاه تشخیص دهد کلیک شده به جریان می اندازد و باعث میشود، تمام توابع نماینده گوش دهنده اجرا شوند. گرچه احتمالاً شما معمولاً برای هر رویداد فقط یک تابع نماینده داشته اید ولی در واقع محودیتی وجود ندارد.

    در بحث لایه بندی هم لاس ها از لایه های مختلف میتوانند به رویدادهای یک دیگر گوش دهند...

    >>> یک مثال عملی جالب تر در انتهای بحث با یک شبه کد بیان شده است.

    ==============

    پیاده سازی:
    اولین مطلب قبل بحث میتواند تایین امضای یک رویداد باشد که با کمک Delegate ها انجام میشود.
    (((
    Delegate ها اشاره گرهای توابع در دات نت هستند و پرداختن به انها خود بحثی مجزا و گفتاری بسیار می طلبد، دوستان برای اطلاعات بیشتر میتوانند به کتاب های موجود و یا MSDN مراجعه کنند.
    )))


    دات نت یکسری Delegate آماده دارد مثل System.EventHandler و در دات نت سه System.Action و System.Func که بسیار کاربردی هستند و... و...

    بعنوان نمونه EventHandler همان delegate آشنای امضای object, EventArgs است که در WinForm به کرات به ان گوش میدهیم!

    تعریف یک رویداد با امضای object, EventArgs :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    از لحاظ استفاده کاربردی میتوان گفت هر سه شکل تعریف فوق برابر هستند و خیلی تفاوتی برای نحوه استفاده ندارند
    در واقع مهم "امضای تابع" است که در هر سه مورد فوق بطور مستقیم و غیر مستقیم، امضا را روی دو آرگومان object, EventArgs گذاشته ایم، نتیجتاً عملاً سه شکل فوق یک عمل یکسان انجام میدهند.

    به جریان انداختن رویداد (در کلاس مالک رویداد):
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    گوش دادن به یک رویداد در کدی که از کلاس ما استفاده میکند:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یا حتی سینتکس زیر برای کدهای کوچک تر
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بخش AnyCode همان جایی است که کدی خواهید نوشت که در قبال رخ دادن رویداد باید اجرا شود.

    قطع ارتباط و عدم گوش دادن به رویداد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    =====

    مثال ما در این پست برای کلاس ناهمزمان با پشتیبانی رویداد پیشرفت کار:
    میتوان کلاسی برای کپی فایل ها، فشرده سازی، بروزرسانی نرم افزار، انتقال اطلاعات دیتابیس، پشتیبان گیری اطلاعات و... در لایه های پایین نوشت بطوریکه مستقل از لایه UI و تکنولوژی آن (WinForm,Wpf, Web, Service و...) باشد. ولی با این وجود این کدها بطور طبیعی نیاز دارند تا حین کارکرد مواردی را به لایه UI یا کاربر گزارش دهند از جمله درصد پیشرفت کار، عملیات جاری در حال انجام و... و تصمیم نمایش و عدم نمایش و طریقه نمایش را بر عهده لایه UI بگذارند.

    کد کلاس اصلی در لایه پایین
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد لایه UI که در واقع مستقل از مکانیزم لایه پایین است و به راحتی میتوان آن را مطابق الگوی Wpf یا ASP.Net و... کرد یا در WinService باشد که اصلاً گزارش دادن این اطلاعات به کاربر برایش مهم نباشد و به رویداد مربوطه گوش ندهد و...
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ==============

    مطلب اول:
    لازم میدانم که حتماً بیان کنم شیوه دیگری از رویداد گرایی وجود دارد که بیش از رویداد گرایی با نام Callback شناخته میشود که در اصل بسیار مشابه رویدادگرایی بیان شده فوق است و طی آن میتوانید تابع نماینده ای برای ارتباط با کد خودتان به لایه پایین تحویل دهید تا با آن بتواند کد لایه بالاتر را (معمولاً در حین انجام کار یا پایان کار) اجرا نماید.

    مطلب دوم:
    تمام موارد فوق عین در VB.Net هم قابل پیاده سازی و انجام است، طبیعتاً سینتکس نوشتاری خودش را دارد.
    حقیقتش دیگر حوصله کافی نوشتن کدهای VB.Net اش را هم نداشتم ولی اگر دوستان با هر بخشی از ان در VB.Net مشکلی داشتند در تالار مطرح بفرمایند، سایر دوستان عزیز و همچنین خودم انشاا... پاسخ خواهیم داد.

    مطلب آخر:
    در آخر لازم میدانم متذکر شوم که مطالب فوق فقط سرنخ های این کار بوده و شاید 33% مطالب بیان شده و جزئیات و قابلیت های متنوع دیگری در این حیطه وجود دارد که دوستان برای تکمیل بحث و قابلیت های این حیطه میتوانند به کتوب و MSDN مراجعه کنند.

    ==============

    موفق باشید.
    Last edited by _H2_; 19-01-2013 at 11:50.

  6. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


صفحه 3 از 3 اولاول 123

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •