نمایش نتایج 1 تا 6 از 6

نام تاپیک: پاین آمدن سرعت در ایجاد تعداد زیاد یوزر کنترل

  1. #1

    پاین آمدن سرعت در ایجاد تعداد زیاد یوزر کنترل

    درود
    وقت بخیر

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


    مشکلاتی که بهش بر خوردم:
    1. وقتی تعداد سطرها میره بالا برنامه کند میشه تا جایی که دیگه کار نمیکنه و هنگ میکنه.
    2. وقتی اطلاعات کم هست برای مثال 50 سطر رو نشون میدم، وقتی اسکرول میکنم چه افقی چه عمودی، برنامه کند عمل میکنه یعنی وقتی اسکرول افقی میکنم اطلاعات به صورت خط موازی هست تا اسکرول تموم میشه اطلاعات درست نشون داده میشه یعنی انگار سرعت لود تو اسکرول هم تاثیر داره و اینکه در این حالت هم بعد از 5دقیقه برنامه یواش یواش میره واسه هنگ کردن.

    آیا راه حلی وجود داره مثلا استفاده از نخ یا یه راه خوب که هم بتونم تعداد زیادی اطلاعات رو فرم نشون بدم هم سرعت مناسب باشه؟

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

    ممنون
    آخرین ویرایش به وسیله aradpc : سه شنبه 01 مهر 1399 در 21:44 عصر

  2. #2

    نقل قول: پاین آمدن سرعت در ایجاد تعداد زیاد یوزر کنترل

    نقل قول نوشته شده توسط aradpc مشاهده تاپیک
    درود
    وقت بخیر

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


    مشکلاتی که بهش بر خوردم:
    1. وقتی تعداد سطرها میره بالا برنامه کند میشه تا جایی که دیگه کار نمیکنه و هنگ میکنه.
    بدیهی است که اینطور بشه، هر کدوم از اون Label ها یک کنترل مستقل ئه، مدیریت اون کنترل سربار پردازشی داره، حافظه لازم داره و ...

    نقل قول نوشته شده توسط aradpc مشاهده تاپیک
    2. وقتی اطلاعات کم هست برای مثال 50 سطر رو نشون میدم، وقتی اسکرول میکنم چه افقی چه عمودی، برنامه کند عمل میکنه یعنی وقتی اسکرول افقی میکنم اطلاعات به صورت خط موازی هست تا اسکرول تموم میشه اطلاعات درست نشون داده میشه یعنی انگار سرعت لود تو اسکرول هم تاثیر داره و اینکه در این حالت هم بعد از 5دقیقه برنامه یواش یواش میره واسه هنگ کردن.
    کلا معماری و ساختار بدی رو بکار برده اید، کار زیادی نمیشه برای این معماری انجام داد.

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

    نقل قول نوشته شده توسط aradpc مشاهده تاپیک
    و در آخر یک سوال: اینکه دیتا گرید ویو چجور کار میکنه که من مثلا 500 رکورد رو یه جا داخلش لود کنم بدون افت سرعت همه رو نشون میده و راحت هم اسکرول میشه اصلا سرعت پایین نمیاد. چون اون هم سطرهارو هنگامی که برنامه اجرا هست داره میسازه ولی افت سرعت نداره. ممنون میشم پاسخ بدین.
    ممنون
    دلایل مهمی داره، اولا کنترل ای مثل DataGridView از یکسری اجزاء انتزاعی تشکیل شده، نه صد ها کنترل مستقل. یعنی اگر 1000 تا سطر داشته باشه و فقط 30 سطر در کادر قابل مشاهده باشه، صرفا برای رسم اون 30 سطر اقدام میشه، اون 970 سطر دیگه برای رسم خودشون کاری انجام نمی دهند، بار پردازشی ایجاد نمی کنند. وقتی Scroll میشن رسم جدول ئه که تغییر می کنه، نه اینکه یک عالمه کنترل مستقل بخوان واقعا جابجا بشن.
    ثانیا روال اشیاء انتزاعی داخل DataGridView برای استفاده در DataGridView طراحی شده، از جنس کلاس های خاصی که دقیقا برای قرار گرفتن داخل جدول هستند. مثلا کلاس DataGridViewElement پایه اجزاء داخل جدول ئه که در مقایسه با کلاس هایی مثل Control فوق العاده سبکتر و ساده تر ئه. طبیعی است که وقتی شما این اجزاء انتزاعی و ساده رو با یک کنترل مستقل و پیچیده تر جایگزین می کنید بار پردازشی افزایش چشمگیری پیدا می کنه.

    این کلاس های انتزاعی داخل DataGridView روال شون هم بهینه است و هم متمرکز. یک کار تکراری رو بارها و بارها انجام نمیدن، تا جایی که میشه کارهای مشابه رو در یک مرحله و همراه هم انجام می دهند. فرضا اگر یک سطر جدید به جدول اضافه شد، ظاهر جدول تغییر می کنه، اما بابت رسم هر کدوم از خانه های اون سطر از نو یکی یکی درخواست رسم داده نمیشه. همه خونه هایی که در کادر دیده می شوند یکجا و فقط با یک درخواست رسم نمایش داده میشن. در حالی که Label ها کنترل های مستقلی هستند، رسم هر کدوم شون یک درخواست مجزا است. Label ها هم هیچ تصوری از این هم ندارن که قرار بوده نقش خانه های جدول رو بازی کنند.

  3. #3
    کاربر دائمی آواتار windowsyar
    تاریخ عضویت
    مرداد 1395
    محل زندگی
    مشهد الرضا
    پست
    208

    نقل قول: پاین آمدن سرعت در ایجاد تعداد زیاد یوزر کنترل

    توضیحات کامل را the king براتون گفتند.
    ولی اگر باز هم اصرار دارید از این روش استفاده کنید
    از روش صفحه بندی استفاده کنید
    و تنها در هر صفحه 10 مورد را نشان بدهید
    کاربر برای مشاهده موارد دیگر از صفحه بعد و صفحه قبل و شماره صفحه استفاده کند

  4. #4

    نقل قول: پاین آمدن سرعت در ایجاد تعداد زیاد یوزر کنترل

    ممنون بابت توضیحات کاملتون.

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

    ممنون

  5. #5

    نقل قول: پاین آمدن سرعت در ایجاد تعداد زیاد یوزر کنترل

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

    بازم ممنون

  6. #6

    نقل قول: پاین آمدن سرعت در ایجاد تعداد زیاد یوزر کنترل

    نقل قول نوشته شده توسط aradpc مشاهده تاپیک
    ممنون بابت توضیحات کاملتون.

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

    ممنون
    اون تاخیر مربوط به پردازش داده ها است، نه نمایش داده ها. طبعا هر چقدر حجم داده ها بیشتر بشه پردازش بیشتری لازم داره، نمیشه کاری کرد که با افزایش تعداد رکورد ها اصلا بار پردازشی افزایش پیدا نکنه، اما برای کاهش بار پردازش داده و سبکتر کردن حجم داده ای که به DataGridView داده میشه بهینه سازی عملی است.
    البته کلا کارایی DataGridView رو نباید با کارایی نرم افزار Excel مقایسه کنید، از نظر حجم کد و کاری که رویشان انجام شده با هم قابل مقایسه نیستند.

    در ضمن مطمئن باشید که حتی در استفاده از DataGridView هم بهینه سازی کد شما تاثیر چشمگیری داره، این مثال رو ببینید :
    https://barnamenevis.org/showthread....%D8%AF%D8%B1-C

تاپیک های مشابه

  1. پاسخ: 17
    آخرین پست: چهارشنبه 25 آذر 1394, 17:55 عصر
  2. پاسخ: 3
    آخرین پست: دوشنبه 08 اسفند 1390, 18:37 عصر
  3. ایجاد اتوماتیک یوزر به تعداد زیاد
    نوشته شده توسط dr.pantagon در بخش ASP.NET Web Forms
    پاسخ: 7
    آخرین پست: چهارشنبه 03 مهر 1387, 05:17 صبح
  4. تعداد رکورد های جدول و سرعت بازیابی
    نوشته شده توسط houtanal در بخش PHP
    پاسخ: 1
    آخرین پست: یک شنبه 08 تیر 1382, 08:43 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •