رفتن به مطلب
  • 0

افت سرعت برنامه در دانلود و ذخیره تصاویر در حین نمایش تصاویر در مولتی پنل


netlog

سوال

سلام به دوستان
من جدولی با فیلدهای زیر دارم:
ID,ImageURL,ImageTarget

و می خوام این سناریو رو پیاده کنم :

1- خواندن همه رکوردها و دانلود تصویر موجود در فیلد ImageUrl
2- ذخیره تصویر دانلود شده در حافظه دستگاه dirInternal و به روز رسانی فیلد ImageTarget
3- نمایش همه تصاویر در مولتی پنل

من این کار رو از طریق زیر انجام دادم:

Sub LoadImages
    ProgressDialogShow2("getting start",False)   
    Dim i As Int
    Dim topY as Int = 0
    Dim query as SQL
    Dim records as Cursor
   
    svPanel.Panel.RemoveAllViews
   
    records = query.ExecQuery("select ID,ImgUrl,ImgFileName from tblImages limit 25")
   
    If (records.RowCount > 0) Then
        For i = 0 To records.RowCount -1
            records.Position = i
            topY = 2%y

            Dim ps As Panel
            ps.Initialize("ps")
            svPanel.Panel.AddView(ps,1%x,topY,98%x,25%y)
       
            ps.LoadLayout("layoutElements")

            ImageView1.tag = "img" & i & ".png"           

            Dim target As DefaultTarget   
            target.Initialize("target",ImageView1)  'ImageView1 Defined in layoutElements

            Dim p As Picasso
            p.Initialize
            p.LoadUrl( records.GetString("ImgUrl") ).Fetch(target)
            p.LoadUrl( records.GetString("ImgUrl") ).IntoImageView(ImageView1)
        Next           
    Else
        Log("no records found")
    End If

    records.Close   
    ProgressDialogHide
End Sub

Sub target_Success(Bitmap1 As Bitmap, Tag As Object)
    Dim img As ImageView
    img = Tag
    Dim filename As String = img.Tag
    Dim ou As OutputStream
    ou = File.OpenOutput(File.DirInternal,filename,False)
    Bitmap1.WriteToStream(ou,100,"PNG")
    ou.Close
    img.SetBackgroundImage(LoadBitmap(File.DirInternal,filename))   
End Sub

اما مشکل: این کد پرفورمنس پایینی داره و با توجه به زمان دانلود تصاویر کندی زیادی در لود اکتیویتی داره

بنده از نخ هم استفاده کردم و تابع LoadImages رو توسط اونها فراخوانی کردم اما هیچ تفاوتی در سرعت اجرا نکرد

نحوه فراخوانی تابع با نخ:

Dim thread As Thread
thread.Initialise("thread")
thread.RunOnGuiThread("LoadImages",Null)

 

حالا ممنون خواهم شد که اگر دوستان راهکار دیگه ای برا بهینه کردن کد من یا بالا بردن سرعت لود سراغ دارن با بنده به اشتراک بگذارند.

پیشاپیش از وقتی که میذارید تشکر می کنم.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

1 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام

فک کنم به صورت درست از ترد استفاده نکردید.

ببنید زمانی از تابع RunOnGuiThread استفاده میشه که شما بخوایید به وسیله تردی بجز Main Thread داخل ui  تغییری ایجاد کنید، مثلا همین ست کردن ایمج توی ایمیچ ویو.

شما ابتدا باید عکس ها رو به وسیله یک تابع دانلود کنید بعدش عکسی که دنلود شده رو به تابع RunOnGuiThread  بدید تا عکس ها رو روی امیچ ویو هاتون قرار بده.

در کل استفاده از مولتی پنل توی بیسیک توصیه نمیشه، بهتره از RecyclerView  و یا AriaListview  استفاده کنید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...