حل شده

بهینه سازی برنامه

بازدید39.9kپست ها3آخرین فعالیت9 سال پیش
0
0

سلام
من چند تا مقاله راجع به بهینه سازی نرم افزار خوندم و حقیقتا هیچی ازشون نفهمیدم که باید چیکار کرد که نرم افزار "کم" نیاره!
من یک نرم افزار ویندوزفون نوشتم، کاربرا جدیدا میگن برنامه خیلی کرش میشه و حقیقتا راست میگن:

(نرم افزارهایی که داخل استور مایکروسافت قرار میگیرند، هربار که توی یک موبایل Crash یا همون Force close در اندروید،
که بشن این Crash ها به مایکروسافت ارسال میشه و مثلا هر دو سه روز یکبار، برنامه نویس میتونه تعداد کرش ها رو ببینه که چقدر به کرش های قبلی اضافه شده )
این برنامه دقیقا 33 روزه که ساخته شده اما این همه کرش!!!!!
توی گوشی خودم که رم 512 داره برنامه خوب کار میکنه و ندیدم که کرش کنه، اما توی بقیه گوشی ها حتی اونایی که رم 1 یا 2 گیگابایتی دارن، کاربرا میگن خیلی کرش میشه.

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

با تشکر

3 پاسخ

1

خواهش میکنم
هر کجا که احتمال بوجود اومدن خطا هست رو باید  handle کنی.

یکسری کارها هستن که باید رعایت کنی تا نتیجه بهتری بگیری مثلا از آبجکت هات میتونی فقط وقتی نیاز داری استفاده کنی و بعد استفاده از بین ببری مثال:

using (MyIDisposableObject obj = new MyIDisposableObject())
{
    // use the object here
} // the object is disposed of here

معمولا نیازی نیست و تاثیر خیلی کمی داره ضمنا خود Garbage collector اینکارو انجام میده ولی بازهم شخصا فکر کنم نال کنی بهتر باشه.
کلا به کدهات نگاه بنداز اگر برنامه خیلی سنگینه حتما جایی رو درست ننوشتی.

1

سلام.برنامه هنگ میکنه یا کرش میشه؟ وقتی برنامه هنگ میکنه دیگه کاری نمیتونه انجام بده و این به اشغال رم و استفاده زیاد از cpu برمیکرده که باید کد رو بهینه تر بنویسی مثل ازاد کردن متغیرها و...
وقتی که برنامه خطا میده اما توسط برنامه نویس handle نشده اینجا برنامه بسته میشه و میگیم کرش شده که اینجا باید خطاها رو handle کنی.

0

ممنون بابت پاسخ
توی ویندوزفون برنامه ها زیاد هنگ نمیکنن حتی زمانی که بخوای به مثلا یک وبسایت با استفاده از HttpWebRequest وصل بشی. (توی دسکتاپ چند ثانیه هنگ میکنه اما توی ویندوزفون هنگ نمیکنه).

نه برنامه من کرش میکنه و میپره بیرون.
بعضی از خطا ها رو Handle کردم مثلا اکثرا همون خطای Invalid Cross-Thread توی دسکتاپ رو میدادن (اینجا شده Access denied).
جدا از کرش شدن، برنامه خیلی کُند شده از نظر خودم، که شاید دلیلش استفاده از عکس های با کیفیت باشه.
سوال آخر: توی متد ها و حلقه ها هم نیازه که متغیرها رو null کرد ؟ اینکار باعث بهتر شدنش میشه؟ مثلا این قسمتی از کد برنامه ـست.

        async void OnResult(object sender, Results result)
        {
            var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;
            await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                if (result.ShowType == ShowType.LoadingControls)
                {
                    var list = tm.List;
                    foreach (var item in list)
                    {
                        MyUserControl2 my = new MyUserControl2();
                        my.Name = item.Name;
                        my.URL = item.URL;
                        my.TITLE = item.Title;
                        my.ImageURL = item.ImageURL;
                        if (SettingsClass.ImageShow)
                            my.SetImageSource = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri(item.ImageURL));

                        my.DOWNLOADED = item.Downloaded;
                        my.Width = LV.ActualWidth; 
                        LV.Items.Add(my);
                    }
                    Remove();
                }
                else if (!string.IsNullOrEmpty(result.Error) || result.Filter != Filter.No)
                    vars.ShowAdminMessage(string.Format("Site Filter: {1}\r\nError:\r\n{0}", result.Error, result.Filter.ToString()));

            });
        }
        void Remove()
        {
            if (LV.Items.Count > 150)
            {
                int i = 0;
                while (i <= 50 && i < LV.Items.Count)
                {
                    LV.Items.RemoveAt(i);
                    i++;
                }
            }
        }

این رویدادی هست که برای گرفتن مقادیر سایت ساختم، نیاز هست آخر حلقه متغیر my رو null کنم؟ یا اون list؟

ممنون

آخرین ویرایش: 20-02-2015 ???? 16:46، توسط The Arrow

سوال برنامه نویسی دارید؟

ندونستن عیب نیست، نپرسیدن چرا!

خوش آمدید

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