# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > WPF >  مقایسه پرفرمنس WPF با Windows Forms

## رضا عربلو

چیزی که چندین بار تست نمودم این است که در نمایش فرم های با کنترل های نسبتاً زیاد و کاملاً مشابه سرعت WPF در مقایسه با Windows forms به مراتب بهتر است. خصوصاً این تفاوت هنگام Resizing و استفاده از کامپاننتهای نظیر TableLayout در windows forms و Grid در WPF مشهود تر است. می خواستم دلیل این تفاوت را بدانم؟
در این مورد این را نیز شنیده ام که در ویندوز ویستا اپلیکیشن های WPF از Vista Drivering Model استفاده می کنند که خطوصاً برای MultiMedia بسیار بهینه شده است. ولی در ویندوز XP چي؟

----------


## Zaparo

ویندوز ویستا بر پایه WPF ه سیستم شما اگه راحت و نرم ویستا رو اجرا میکنه WPF رو خیلی سریعتر میکنه در ویستا چیزی به اسم DWM(Desktop Window Managment) هست کاره گرافیکی و همون Aero رو انجام میده این سرویس گرافیکی ویستا متفاوت با قدیم شده شما در WPF با یه VisualStyle سرو کار دارید ولی در WindowsForm کنترل خالص هست و سیستم عامل اون رو Paint میکنه ولی در WPF اینطور نیست بهمین دلیل کنترلهای WPF رویداد Paint ندارند و خوب این از لحاظ سرعت خیلی سریع تر از Windows Form هست یکی از تفاوت های GUI ویندوز XP با Vista در همین سیستم پردازش گرافیکی (DWM) بهمین دلیل شما لک ندارید اگر دیده باشی سیستم وقتی هنگ میکنه پنجره ها رو میکشی جای پنجره ها روی صفحه میشه دلیلش اینه که CPU نمیتونه Desktop رو دوباره Release کنه و دوباره بکشه و تاخیر میندازه بنا ولی استفاده از WPF در XP مزایایی داره و معایبی که بحث نمیکنیم ولی اگه شما میخوای واقعا" ببینی WPF چیه تو ویستا ازش استفاده کن اون وقت میتونی از قابلیتهای DWM هم استفاده کنی مثل Aero شاید مثالش رو هم دیده باشی که با API مربوط به DWM میاد یه فرم Glass رو میسازه

----------


## محمدامین شریفی

بچه ها وقتی که از کنترل های win32 در WPF استفاده میکنیم  سرعت برنامه خیلی وحشتناک پایین میاید.
2 تا پرسش برایم پیش آمده است.
*اول اینکه در WPF یک نام دامنه داریم به نام:"PresentationFramework.Aero"*
،به نظر شما آیا نحوه کار کردن آن در vista و win7 با بقیه سیستم عامل ها فرق میکند؟اگر جواب شما "بله" باشد،مگر فلسفه وجودی "پلت فرم" این نیست که در همه سکوهی نرم افزاری یک جور عمل کند؟
پرسش دومم هم این است:*آیا بکار نبردن کنترل های شبیه win32 مانند(گرید ویو و openfiledialoge و ...)دلیل بر ناپختگی WPF هست*،یا به دلیل کارایی WPF از این کنترل ها استفاده نشده است؟شما برای جایگزین کردن این کنترل ها چه راهکاری را پیش میگیرید؟(من از WindowsFormsHost استفاده میکنم،که همانطور که گفته شد بسیار سرعت را پایین می آورد)

پیروز باشید.

----------


## arash1718

> *اول اینکه در WPF یک نام دامنه داریم به نام:"PresentationFramework.Aero"*
> ،به نظر شما آیا نحوه کار کردن آن در vista و win7 با بقیه سیستم عامل ها فرق میکند؟اگر جواب شما "بله" باشد،مگر فلسفه وجودی "پلت فرم" این نیست که در همه سکوهی نرم افزاری یک جور عمل کند؟


همین win32 هم از نظر گرافیکی با اون چیزی که توی سیستم عامل های دیگه اجرا میشه فرق می کنه!




> پرسش دومم هم این است:*آیا بکار نبردن کنترل های شبیه win32 مانند(گرید ویو و openfiledialoge و ...)دلیل بر ناپختگی WPF هست*،یا به دلیل کارایی WPF از این کنترل ها استفاده نشده است؟شما برای جایگزین کردن این کنترل ها چه راهکاری را پیش میگیرید؟(من از WindowsFormsHost استفاده میکنم،که همانطور که گفته شد بسیار سرعت را پایین می آورد)


دو دلیل اصلی داره ، یکی اینکه WPF خیلی نوپاست هنوز و دوم اینکه یه مقدار مقاصدش فرق داره با قبل و Microsoft خواسته دستی هم در بازاری ببره که نرم افزارهایی مثل Photoshop و Flash درش فعالیت دارن و کاربرهاش رو از یه همچین نرم افزارهایی بی نیاز کنه!

ولی در کل WPF هنوز به درد استفاده تجاری نمی خوره (به دلیل باگ های فراوان)

----------


## احمد سامعی

همنطور كه مي دونيد ويستا به دليل مشكلات زيادي كه داره زياد تو دنيا طرفدار پيدا نكرد و مثلا تو ايران فقط غير حرفه اي ها و عوام ازش استفاده مي كنند
و بضعي از كنترل هاي سفارشي WinApp در ويستا خوب عمل نمي كنه
سوال:  آيا بايد در همچين شرايطي براي برنامه هاي تجاري به سمت WPF ( كه هم خودش و هم ويستا كه باهاش سازگارتر مشكل دارن) رفت يا بايد براي برنامه تجاري كه گرافيك هم لازم دارن همچنان از WinApp استفاده كرد بدون توجه به ناسازگاري اين كنترل ها با ويستا و احتمالا ويندوزهاي آينده مثل 7

----------


## Mehdi Asgari

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

----------


## Mahdi.Kiani

لطفا از حواشی بدور باشید./

----------


## Rocker

نمی دونم دوستان به موردی که من اشاره میکنم قبلا اشاره کردن یا نه اما یکی از دلایلش میتونه این باشه که wpf به جای استفاده از cpu از gpu استفاده میکنه یعنی همه ی پردازشهای مربوط به رندر کردن فرم در کارت گرافیک انجام میشه و اگراینکه میبنید برنامه wpf رو سیستم شما بهرت اجرا میشه میتونه به این علت باشه که شما کارت گرافیک قوی تری دارید 
درسته ؟؟؟

----------


## 13601360

> - wpf فقط روی ویندوز ویستا، ویندوز 2008، win xp sp2 و آخرین RDP ویندوز 2003 کار می‌کند.    
> ۲- بسیار گفته شده که wpf در حوزه کنترل‌های کار با دیتا مثل DataGrid کمبودهای زیادی دارد. البته با وجود این ضعف گفته می‌شود که wpf در DataBindingهای آبجکتی مرسوم در دنیای Domain Drivern Design خیلی خوب عمل می‌کند. این مدل DataBinding از همان نوعی است که همراه با ORMهایی مثل NHibernate و LINQ رایج شده است. 
> ۳- استدلال تعدادی از افراد برای عدم استفاده از wpf عدم علاقه آنها به دست کشیدن از دانسته‌ها و مهارت‌های قبلی‌شان در winforms و یادگیری تکنولوژی جدید wpf است. اگر شما هم مثل ما تجربه چندان با ارزشی روی winforms ندارید می‌توانید با انگیزه بیشتری به wpf فکر کنید. 
> ۴- wpf یک عمو زاده دارد به نام SilverLight که هر دو در استفاده از XAML مشترک هستند. هر چند که SilverLight زیرمجموعه‌ای از wpf محسوب می‌شود ولی می‌توانید امیدوار باشید که با یادگیری wpf خود به خود کمی هم SilverLight یاد گرفته‌اید. 
> ۵- wpf برای تولید و نمایش UI از خیلی از امکانات DirectX ،GPU و حافظه کارت گرافیک استفاده می‌کند و رابطه خیلی خوبی با پخش انواع فایل تصویری، ویدیویی، صوتی و انیمیشن دارد. 
> ۶- ادعا می شود که کد منطق برنامه و کد Prsesentation در wpf کاملا از هم جداست. یعنی می توان کد XAML را به فردی که هیچ اطلاعاتی راجع به C#‎‎ ندارد سپرد تا آن را با Expression Blend حسابی عمل بیاورد. کد سی‌شارپ هم می‌تواند توسط یک برنامه‌نویس متعارف در Visual Studio توسعه پیدا کند. 
> ۷- علی القاعده در برنامه های فارسی و آنهایی که از تقویم شمسی استفاده می‌کنند مشکلات زیادی وجود خواهد داشت. چون هنوز هیچ‌کس یک DatePicker فارسی با wpf ننوشته است و رفتار بقیه کنترل‌ها هم در محیط‌های پیچیده راست به چپ نویسی معلوم نیست. البته در مستندات خود wpf ذکر شده که پشتیبانی خیلی خوبی از یونیکد و مسایل localization وجود دارد.


**************************************************  ************

----------


## احمد سامعی

دوست عزيز من تو پست هاي ديگه جواب هاي شما رو ديدم معمولاً پاسخ هاي خوبي مي ديد

اما موردي كه پايين ذكر كرديد اشتباه باخبر نبودن ما از يك چيز دليل نبودش نيست




> - علی القاعده در برنامه های فارسی و آنهایی که از تقویم شمسی استفاده می‌کنند مشکلات زیادی وجود خواهد داشت. چون هنوز هیچ‌کس یک DatePicker فارسی با wpf ننوشته است


در اين ضميمه اي كه من گذاشتم مي تونيد يك تقويم شمسي كه هم ويندوزفرم و هم WPF ساپورت مي كنه بگيريد.

----------


## محمدامین شریفی

> دوست عزيز من تو پست هاي ديگه جواب هاي شما رو ديدم معمولاً پاسخ هاي خوبي مي ديد
> 
> اما موردي كه پايين ذكر كرديد اشتباه باخبر نبودن ما از يك چيز دليل نبودش نيست
> 
> 
> 
> در اين ضميمه اي كه من گذاشتم مي تونيد يك تقويم شمسي كه هم ويندوزفرم و هم WPF ساپورت مي كنه بگيريد.


1)آیا واقعا با wpf طراحی شده؟یا با windowsFormsHost برگردانده شده است؟
2)آیا ادغام wpf با win32 کار درستی هست؟(چون اگر این 2 با هم ادغام شوند سرعت برنامه بشدت پایین می آید و از لحاظ گرافیکی هم ناهمگون میشود)بچه ها لطفا راه حل هایی که خودتان در پروژه یتان بکار بردید را ارائه بدهید،نه لینک و مسائل تئوری.

با سپاس.

----------


## احمد سامعی

> 1)آیا واقعا با wpf طراحی شده؟یا با windowsFormsHost برگردانده شده است؟
> 2)آیا ادغام wpf با win32 کار درستی هست؟(چون اگر این 2 با هم ادغام شوند سرعت برنامه بشدت پایین می آید و از لحاظ گرافیکی هم ناهمگون میشود)بچه ها لطفا راه حل هایی که خودتان در پروژه یتان بکار بردید را ارائه بدهید،نه لینک و مسائل تئوری.
> 
> با سپاس.


من نمي دونم از چي برگردانيده شده يا از ابتدا طراحي شده
بهر حال يك كامپونت تقويم براي كار در محيط WPF هست. بقيه اش بايد از نويسنده اش پرسيد.
من فقط جواب دوستمون كه گفتن وجود نداره، گفتم چرا هست

----------


## Mehdi Asgari

میتونی برنامه های WPF رو توسط Profiler مخصوص بررسی کنی:
http://elegantcode.com/2009/04/08/an...-with-wpfperf/
http://msdn.microsoft.com/en-us/library/aa969767.aspx

----------


## Zaparo

arash1718 میشه برای حرفهاتون دلیل بیارین؟ (یعنی بعد از گذشت 4 سال از معرفی WPF هیچ برنامه تجاری باهاش نوشته نشده؟ بعد قصدش فقط نرم افزارهای مثل Flash و Photoshop نیست هدف چیز دیگریه!
در Win32 اونطوری که شما میگید بعید میدونم باشه میشه دلیل بیارید باز هم شرمنده؟

بعد اینکه PresentationFramework.Aero  برای استفاده از تم ویستا در برنامه هایی هست که مثلا" در ویندوز کلاسیک استفاده میشن

WPF فقط به ویستا محدود نمیشه در اینکه ویستا محبوبیت اکس پی رو نداشت بحثی نیست ولی خوب ویستا رو بهتره یه مقدمه ای برای نسل جدید سیستم عاملهای ماکروسافت دونست ، خیلی چیزها در ویستا هست که در اکس پی نیست و درسته تاحدودی ناقصه ولی خوب میشه پلی دونست برای آیند و همینطور WPF ، چیزی در مورد برنامه نویسی تحت Microsoft Surface شنیدی؟ در مورد MultiTouch که در ویندوز 7 معرفی شده و ...

ولی بهتر شما هم به سمت WPF کوچ کنید اگه میخواید با ماکروسافت برید جلو برید سمتش اگه نه بیخیال شید بهتره!

----------

