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

نام تاپیک: نمایش اطاعات یک آرایه بزرگ در textbox

  1. #1

    نمایش اطاعات یک آرایه بزرگ در textbox

    فرض کنید حدود 40000 عدد رو از یک فایل خونده و توی یک آرایه قرار داده ایم. حالا می خواهیم تمام این اطلاعات رو به ترتیب توی textbox نمایش بدهیم. وقتی این کار اجرا می شه یک چیزی حدود 2-3 دقیقه طول می کشه (در این مدت برنامه هنگ می کنه). آیا راه حل بهتری وجود داره؟

  2. #2
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط SYSMAN مشاهده تاپیک
    فرض کنید حدود 40000 عدد رو از یک فایل خونده و توی یک آرایه قرار داده ایم. حالا می خواهیم تمام این اطلاعات رو به ترتیب توی textbox نمایش بدهیم. وقتی این کار اجرا می شه یک چیزی حدود 2-3 دقیقه طول می کشه (در این مدت برنامه هنگ می کنه). آیا راه حل بهتری وجود داره؟
    مثال کدتان را لطفاً ضمیمه کنید.

  3. #3
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    برای اینکه در زمان اجرای دستورات بزرگ،برنامه هنگ نکنه، باید از Threading استفاده کنی.

  4. #4
    نقل قول نوشته شده توسط hdv212 مشاهده تاپیک
    برای اینکه در زمان اجرای دستورات بزرگ،برنامه هنگ نکنه، باید از Threading استفاده کنی.
    اینکه مشخص هست. ولی مشکل من به خاطر سرعت نمایش در textbox هست. نه صرفا هنگ برنامه.

  5. #5
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    خب میشه مشکلتو واضح تر بگی. خب دستوری که داره اجرا میشه خیلی بزرگه،زمان زیادی هم صرف تمام شدن این Thread میشه. میشه کدی که اطلاعات رو میخونه و در Textbox نشون میده رو اینجا بذاری؟ فکر کنم مشکل از کند بودن خواندن اطلاعاته.

  6. #6
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313
    نقل قول نوشته شده توسط SYSMAN مشاهده تاپیک
    فرض کنید حدود 40000 عدد رو از یک فایل خونده و توی یک آرایه قرار داده ایم. حالا می خواهیم تمام این اطلاعات رو به ترتیب توی textbox نمایش بدهیم. وقتی این کار اجرا می شه یک چیزی حدود 2-3 دقیقه طول می کشه (در این مدت برنامه هنگ می کنه). آیا راه حل بهتری وجود داره؟
    40000 عدد را چطوری در یک تکتس باکس قرار دادی؟! آیا برای هر عدد یک تکتس باکس اضافه کردی؟ بهترین گزینه استفاده از لیست باکس هست

  7. #7
    توی یک textbox می خواهم اطلاعات رن نمایش بدهم.

    این هم نمونه کد:

    private void ReadFile(string FileName)
    {

    try
    {
    System.IO.TextReader r = System.IO.File.OpenText(FileName);
    string[] numbers = r.ReadToEnd().Split(new Char[] {'\n', '\r'},
    StringSplitOptions.RemoveEmptyEntries);

    foreach (string st in numbers)
    txtList.Text += st + "\r\n";

    }
    catch
    {

    }

  8. #8
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط hdv212 مشاهده تاپیک
    برای اینکه در زمان اجرای دستورات بزرگ،برنامه هنگ نکنه، باید از Threading استفاده کنی.
    نقل قول نوشته شده توسط SYSMAN مشاهده تاپیک
    اینکه مشخص هست. ولی مشکل من به خاطر سرعت نمایش در textbox هست. نه صرفا هنگ برنامه.
    Threading چکشی نیست که برایه هر میخی استفاده بشه، روشی که استفاده میکنند اشکال داره.
    تمامه اعداد را میخواهند از هم جدا کنند بعد نمایش بدن، حتی اگر از تردینگ هم استفاده کنند این مشکل را حل نمیکنه، تا موقعی که تمام اعداد را در آرایه نریخته تمام نمیشه.
    به جایه اینکه تمامه تکست فایل را بخوانند باید یکی یکی اعداد را از فایل بگیرند و در تکست نشان بدند (تکست پاکس را آپدیت کنند).

  9. #9
    Threading چکشی نیست که برایه هر میخی استفاده بشه، روشی که استفاده میکنند اشکال داره.
    تمامه اعداد را میخواهند از هم جدا کنند بعد نمایش بدن، حتی اگر از تردینگ هم استفاده کنند این مشکل را حل نمیکنه، تا موقعی که تمام اعداد را در آرایه نریخته تمام نمیشه.
    به جایه اینکه تمامه تکست فایل را بخوانند باید یکی یکی اعداد را از فایل بگیرند و در تکست نشان بدند (تکست پاکس را آپدیت کنند).
    دوست عزیز مشکل ریختن اعداد در آرایه نیست. چون خیلی سریع اینکار انجام می شه، مشکل زمانی ایجاد می شه که این آرایه توی textbox نمایش داده بشه!!

    راستی یک نکته خیلی جالب در مورد همین مشکل:
    همونطوری که linux فرمودند استفاده از لیست باکس کار بهتری هست و یک اختلاف فاحش از نظر نمایش اطلاعات داره به طوری که همون تعداد رکورد توی textbox بعد از 5 دقیقه نمایش داده نشد در یک list box بعد از 8 ثانیه به نمایش در آمد!!!! کسی می دونه علت چی هست؟

  10. #10
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111
    همونطوری که linux فرمودند استفاده از لیست باکس کار بهتری هست و یک اختلاف فاحش از نظر نمایش اطلاعات داره به طوری که همون تعداد رکورد توی textbox بعد از 5 دقیقه نمایش داده نشد در یک list box بعد از 8 ثانیه به نمایش در آمد!!!! کسی می دونه علت چی هست؟
    nدوست عزیز فکر کنم به این علت این خط از کد شما باشد

    txtList.Text += st + "\r\n";
    چون شما 40000 بار متن داخل textbox را تغییر می دهید رویدادهای ان باید اجرا شود شما بجای این خط این ابتدا تمام اطلاعاترا در یک رشته بیز بعد به تکس باکس بده

  11. #11
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111

    Smile

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

    Int32 a;
    string s="";
    for (a = 0; a < 4000; a++) {
    textBox1.Text += "\r\n"+ a.ToString();

    }


    Int32 a;
    string s="";
    for (a = 0; a < 4000; a++) {
    s += "\r\n" + a.ToString();
    }
    textBox1.Text = s;


    اولی 50 ثانیه طول می کشد بعدی در 1 ثانیه

  12. #12
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    منم موافقم .. مشکل همون کدی هست که ghafoori عزیز گفت

  13. #13
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313
    نقل قول نوشته شده توسط SYSMAN مشاهده تاپیک
    دوست عزیز مشکل ریختن اعداد در آرایه نیست. چون خیلی سریع اینکار انجام می شه، مشکل زمانی ایجاد می شه که این آرایه توی textbox نمایش داده بشه!!

    راستی یک نکته خیلی جالب در مورد همین مشکل:
    همونطوری که linux فرمودند استفاده از لیست باکس کار بهتری هست و یک اختلاف فاحش از نظر نمایش اطلاعات داره به طوری که همون تعداد رکورد توی textbox بعد از 5 دقیقه نمایش داده نشد در یک list box بعد از 8 ثانیه به نمایش در آمد!!!! کسی می دونه علت چی هست؟
    دلیلش را که دوستان گفتند شما وقتی مقدار تکست یک کنترل را عوض می کنید به همراه آن چندتا رخداد هم پیش می آید که اینها زمان می برند.
    من اصلا نمی فهمم برای چی این 40000 عدد را باید در تکست باکس نمایش بدهید؟ هر کدام از کنترل ها برای کارهای خاصی در نظر گرفته شده اند.

  14. #14
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629
    با سلام
    ظاهراً دیر رسیدم، اما یه نکته:
    اگه در یکى از رویه‌هاى برنامه حلقه‌اى طولانى دارید، براى این که سیستم دچار سکته‌ى ناقص (همان هنگ که گفتین) نشود در حلقه فرمان ()DoEvents را قرار دهید تا سیستم به وقفه‌ها رسیدگى کند و حالت هنگ را نبینید.
    البته باید توجه داشته باشین که خود این فرمان کمى باعث طولانى‌تر شدن زمان اجرا مى‌شه اما ارزشش رو داره.

    صبا صبوحى

  15. #15
    نقل قول نوشته شده توسط SabaSabouhi مشاهده تاپیک
    با سلام
    ظاهراً دیر رسیدم، اما یه نکته:
    اگه در یکى از رویه‌هاى برنامه حلقه‌اى طولانى دارید، براى این که سیستم دچار سکته‌ى ناقص (همان هنگ که گفتین) نشود در حلقه فرمان ()DoEvents را قرار دهید تا سیستم به وقفه‌ها رسیدگى کند و حالت هنگ را نبینید.
    البته باید توجه داشته باشین که خود این فرمان کمى باعث طولانى‌تر شدن زمان اجرا مى‌شه اما ارزشش رو داره.

    صبا صبوحى
    در این حالت استفاده از thread راه حل صحیح تری هست

    نقل قول نوشته شده توسط linux
    من اصلا نمی فهمم برای چی این 40000 عدد را باید در تکست باکس نمایش بدهید؟ هر کدام از کنترل ها برای کارهای خاصی در نظر گرفته شده اند.
    بایدی نداره. علت اصلی می تونه امکان ویرایش مستقیم توسط کاربر باشه.

  16. #16
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313
    نقل قول نوشته شده توسط SYSMAN مشاهده تاپیک
    در این حالت استفاده از thread راه حل صحیح تری هست



    بایدی نداره. علت اصلی می تونه امکان ویرایش مستقیم توسط کاربر باشه.
    به نظر می رسه که طراحی اشتباه تو برنامه به این مسیر ختم شده

  17. #17
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط linux مشاهده تاپیک
    به نظر می رسه که طراحی اشتباه تو برنامه به این مسیر ختم شده
    طراحی؟؟ چه نوع طراحی به اینجا خطم میشه؟
    احتمالاB مشکل چیزه دیگری است. وگرنه هیچ کسی با ۴۰۰۰۰ تا چیز هیچ وقت یکجا کار نمیکنه.(اگر میکنه مثال بفرستید! :))
    شاید این برایه تمرین کاره دیگریست.

  18. #18
    نقل قول نوشته شده توسط linux مشاهده تاپیک
    به نظر می رسه که طراحی اشتباه تو برنامه به این مسیر ختم شده
    دوست عزیز طراحی اشتباه نبوده

    نقل قول نوشته شده توسط اَرژنگ مشاهده تاپیک
    شاید این برایه تمرین کاره دیگریست.
    دقیقا

  19. #19
    کاربر دائمی آواتار Sorenaa_s
    تاریخ عضویت
    اردیبهشت 1386
    سن
    43
    پست
    115
    1. زمانیکه از Threading استفاده میشه، اگر در Thread جدید، با UI کای انجام بشه ( مثلا همین نوشتن متن ر TextBox ) به شدت UI رفتارهای عجیب و غریب از خودش نشون میده ( مثلا همین پایین بودن سرعت و یا هنگ کردن ) در این موارد بهتره که از Form.Invok برای کار با UI استفاده بشه.

    2. concatenate کردن string به شدت کند صورت می گیره، و روی Memory تاثیر بدی داره، بهتره از StringBuilder استفاده بشه. این کار به شدت سرعت اجرای کد رو بالا میبره ( رو همین مثال میشه تست کرد )

    3. به نظر من هم بهترین راه استفاده از ListBox هست. البته به این صورت که از آرایه ای که از Split بدست آمده ArrayList ساخته بشه و به ListBox.DataSource اختصاص داده بشه.

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

  1. تعداد کاراکترهای TextBox
    نوشته شده توسط مجتبی جوادی در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 5
    آخرین پست: یک شنبه 09 اردیبهشت 1386, 12:46 عصر
  2. رابطه بین textbox و فرامین SQL
    نوشته شده توسط masoudcarpet در بخش برنامه نویسی در 6 VB
    پاسخ: 4
    آخرین پست: جمعه 07 اردیبهشت 1386, 18:01 عصر
  3. چگونه محتویات یک textbox html را در textbox asp.net قرار داد
    نوشته شده توسط j-mehdi در بخش طراحی وب (Web Design)
    پاسخ: 13
    آخرین پست: دوشنبه 30 خرداد 1384, 21:44 عصر

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

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