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

نام تاپیک: چرا گرافیک معمولی سی شارپ اینقدر کنده ؟!!

  1. #1

    چرا گرافیک معمولی سی شارپ اینقدر کنده ؟!!

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

  2. #2
    کاربر دائمی آواتار navid_8x
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    قزوین
    پست
    130

    نقل قول: چرا گرافیک معمولی سی شارپ اینقدر کنده ؟!!

    سی شارپ حرفه ای تر از وی بی 6 هستش. سرعتشم بیشتره اگه بافر کنی.

  3. #3
    کاربر دائمی آواتار debugger
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    Turkey
    پست
    843

    نقل قول: چرا گرافیک معمولی سی شارپ اینقدر کنده ؟!!

    دوست عزیز بستگی به شیوه کد نویسی هم داره

    البته برنامه های native کمی از برنامه های تحت دات نت سریعتر هستند . و این بدیهی است . دلیلش هم واضحه

  4. #4

    تشکر + روش من + روش درست .

    نقل قول نوشته شده توسط navid_8x مشاهده تاپیک
    سی شارپ حرفه ای تر از وی بی 6 هستش. سرعتشم بیشتره اگه بافر کنی.
    سلام
    ممنون
    این روش کلی هست که من استفاده میکنم:

    Pic.BackgroundImage = new Bitmap(Pic.Width, Pic.Height);
    BackGraphic = Graphics.FromImage(Pic.BackgroundImage);
    و بعد روی ابجکت گرافیکم کارها رو انجام میدم و در نهایت پیکچرباکس رو دوباره رفرش میکنم .
    هیچ نوع فلیکری هم نداره .
    لطفا اگر این روش اشکالی داره و علت کندی برنامم همین هست روش های دیگه رو هم بفرمایید .
    ممنون

  5. #5

    نمونه کد

    این نمونه کد وی بی 6 و سی شارپ هست :

    سی شارپ

    Bitmap MyBitmap = new Bitmap(1024, 768);
    Graphics g = Graphics.FromImage(MyBitmap);
    DateTime STime = DateTime.Now;
    Pen MyPen = new Pen(Color.Black);
    for (int i = 0; i < 100000; i++)
    {
    g.DrawLine (MyPen, 0, 0, 1024, 768);
    }
    MessageBox.Show(DateTime.Now.Subtract(STime).Total Milliseconds.ToString());
    وی بی 6 :

    t = Timer
    For i = 1 To 100000
    Me.Line (0, 0)-(1024, 768), 0
    Next
    MsgBox (Timer - t)
    تو کامپیوتر من کد سی شارپ 4.2 ثانیه زمان میبره اما کد VB6 حدود 1.37 ثانیه .
    هر دو کد هم یه کار رو انجام میدن !!
    فایل های ضمیمه فایل های ضمیمه

  6. #6
    کاربر دائمی آواتار navid_8x
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    قزوین
    پست
    130

    نقل قول: چرا گرافیک معمولی سی شارپ اینقدر کنده ؟!!

    Bitmap MyBitmap = new Bitmap(1024, 768);
    Graphics g = Graphics.FromImage(MyBitmap);
    BufferedGraphicsContext c = new BufferedGraphicsContext();
    BufferedGraphics gr = c.Allocate(g, new Rectangle(0, 0, 1024, 768));
    DateTime STime = DateTime.Now;
    Pen MyPen = new Pen(Color.Black);
    for (int i = 0; i < 100000; i++)
    {
    gr.Graphics.DrawLine(MyPen, 0, 0, 1024, 768);
    }
    gr.Render(g);
    MessageBox.Show(DateTime.Now.Subtract(STime).Total Milliseconds.ToString());

    اینو ببین

  7. #7

    تشکر - کند

    سلام
    ممنونم
    اما تست کردم سرعت این از قبلی هم کمتر بود .
    اینجا هم پرسیدم ، یه نفر جواب داد به نظر منطفی میومد جوابش :
    http://stackoverflow.com/questions/4...-in-c-than-vb6
    گفت که اون چیزی که در وی بی 6 استفاده میشه GDI هست و 24 بیت و بدون الفا و این GDI+ هست و 32 بیت و AntiAliased و ... .
    فایل های ضمیمه فایل های ضمیمه

  8. #8
    کاربر دائمی آواتار debugger
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    Turkey
    پست
    843

    نقل قول: چرا گرافیک معمولی سی شارپ اینقدر کنده ؟!!

    برای اینکه سرعت خیلی خیلی خیلی بالا بره باید OnPaint را Override کنید


    protectedoverridevoid OnPaint(PaintEventArgs paintEvnt)
    {
    Graphics gfx = paintEvnt.Graphics;
    Pen myPen = newPen(Color.Black);
    //
    for (int i = 0; i < 100000; i++)
    {
    gfx.DrawLine(myPen, 0, 0, 1024, 768);
    break;
    }
    return;
    }


    حالا ببین در عرض صفر میلی ثانیه خط را رسم میکنه . عمرا اگر با وی بی 6 بتونی همچین کاری بکنی
    فایل های ضمیمه فایل های ضمیمه

  9. #9

    نقل قول: چرا گرافیک معمولی سی شارپ اینقدر کنده ؟!!

    نقل قول نوشته شده توسط debugger مشاهده تاپیک
    برای اینکه سرعت خیلی خیلی خیلی بالا بره باید OnPaint را Override کنید


    protectedoverridevoid OnPaint(PaintEventArgs paintEvnt)
    {
    Graphics gfx = paintEvnt.Graphics;
    Pen myPen = newPen(Color.Black);
    //
    for (int i = 0; i < 100000; i++)
    {
    gfx.DrawLine(myPen, 0, 0, 1024, 768);
    break;
    }
    return;
    }
    حالا ببین در عرض صفر میلی ثانیه خط را رسم میکنه . عمرا اگر با وی بی 6 بتونی همچین کاری بکنی
    سلام
    نه اینم سرعتش همون طوریه
    break گذاشتین فقط یه بار رسم می کنه و خارج میشه ، 100000 تا که تو این هست حدود 30 ثانیه با کامپیوتر من .

    کلا سرعت سی شارپ خیلی کمتر هست تو کارهای گرافیکی عادی .
    نمونه دیگه الفابلند هست که با دستورات خود سی شارپ نسبت به api های ویندوز که تو وی بی 6 استفاده میکردم خیلی خیلی کندتر بود .
    فایل های ضمیمه فایل های ضمیمه

  10. #10

    نقل قول: چرا گرافیک معمولی سی شارپ اینقدر کنده ؟!!

    نباید توقع سرعتی که تو یه زبان Native داشتید رو از Net. داشته باشید ، این طبیعی هست که سرعت کمتر از زبان Native باشه مخصوصا در این نوع موراد که برنامه نیاز به Performance داره ، شما در زبانی مثل دلفی یا ++VC یا ... مستقیم با توابع API ویندوز کار میکنید ولی در Net. خیر ، کد شما باید توسط CLR و Framework طراحی شده برای سکوی ویندوز ترجمه بشه و بعد اجرا بشه ...

برچسب های این تاپیک

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

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