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

تغیر بایت یک فایل با حجم بالا و کرش برنامه


arastooms

سوال

سلام به همه عزیزان یک فرمان دارم از کتابخانه ByteConverter
که یک فایل با حجم بالا تر از 10 mb رو تغییر بایت میده

مشکل اینجاست که این فایل یک دیتابیس هست که وقتی با این کتابخونه این فرمان رو اجرا میکنم در گوشی های ضعیف و ورژن های پایین کرش میکنه برنامه 
اگر رم و حافظه پُر باشه هم به سختی این کار رو انجام میده 

دیتابیس رو به 2 فایل کوچک تقسیم کردم و متوجه شدم به درستی کار میکنه 
ولی به دلایلی نمی تونم  دیتا بیس رو خرد کنم و تکه تکه بشه ...

از طرفی مطلبی در باره کتابخانه thread   مطالعه کردم که البته در انجمن مطالب خیلی زیادی در این باره نیست و مطالبی هم که هست به خاطر گنگ بودن برای من خیلی مشکلم رو برطرف نکرد

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

1_ این عملیات در شروع برنامه هر بار انجام میشه و زمانی که صفخه اسپلش برنامه میاد 2 ثانیه وقت دارم که این عملیات رو انجام بدم 
چه طور میتونم این عملیات رو بدم به یه " نخ " دیگه تا برنامه کرش نکنه؟؟

با تشکر 
از همه اساتید


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

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

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

سلام ،

ببینید مشکلتون با کتابخانه AriaAsynkTask حل نمی شه؟!

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

موفق باشید

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

سلام ،

ببینید مشکلتون با کتابخانه AriaAsynkTask حل نمی شه؟!

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

موفق باشید

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

مثلا نمی تونم یه دستور رو داخلش تعریف کنم 

برای مثال این دستور ساده کپی دیتابیس هست 

چه طور باید بگیم این کار رو انجام بده و هم زمان یک دیتابیس دیگه هم با دستور مشابه همین کپی کنیم

 

If File.Exists(File.DirInternal & "/"&folder_aaa ,"db1.db")=False Then
File.Copy(File.DirAssets,"xxxx",File.DirInternal & "/"&folder_aaa,"db1.db")
End If

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

سلام ارسطو جان ، یه نمونه کد زدم که بهتر درک کنی کار با کتابخونه رو ، تسک زیر میاد اول فایل رو چک میکنه و کپی میکنه و هر دو حالت رو هم از طریق آپدیت کردن progress گزارش میده و بعد میاد از طریق byteConvertor هر کاری که بخواین رو انجام میده (کد هاتو جایگزین کن) و بعد که همه ی کار ها تموم شد "Anjam shod" رو برمیگردونه و تسک تموم میشه و ساب OnPostExecute اجرا میشه و بهتون میگه که کار تسک انجام شده :

Sub Activity_Create(FirstTime As Boolean)
	
	AriaTask.Initialize("AriaTask")
	AriaTask.Run(Null)

End Sub

Sub AriaTask_DoInBackground(params() As Object) As Object
	
If File.Exists(File.DirInternal & "/"&folder_aaa ,"db1.db")=False Then
File.Copy(File.DirAssets,"xxxx",File.DirInternal & "/"&folder_aaa,"db1.db")
AriaTask.PublishProgress(10)
Else
AriaTask.PublishProgress(20)	
End If


Dim byteC As ByteConverter
byteC............
Return "Anjam shod"
End Sub

Sub AriaTask_OnPostExecute(param As Object)
		Msgbox(param,"AriaAsyncTask")
End Sub

Sub AriaTask_OnPreExecute
	
End Sub

Sub AriaTask_OnProgressUpdate(progress As Int)
		If progress=10 Then
			Log("File Copy shod")
		End If
		If progress=20 Then
			Log("File qablan copy shode bude")
		End If
End Sub
لینک ارسال
به اشتراک گذاری در سایت های دیگر

 

سلام ارسطو جان ، یه نمونه کد زدم که بهتر درک کنی کار با کتابخونه رو ، تسک زیر میاد اول فایل رو چک میکنه و کپی میکنه و هر دو حالت رو هم از طریق آپدیت کردن progress گزارش میده و بعد میاد از طریق byteConvertor هر کاری که بخواین رو انجام میده (کد هاتو جایگزین کن) و بعد که همه ی کار ها تموم شد "Anjam shod" رو برمیگردونه و تسک تموم میشه و ساب OnPostExecute اجرا میشه و بهتون میگه که کار تسک انجام شده :

امین جان سپاس و سپاس و تشکر بابت زحمات و راهنمایی شما 

مثل همیشه عالی و بی نقص

( تا موضوع داغ هست و فراموش نکردید بپرسم موضوع اصلی رو )

من یک فایل دارم که هدفم اینه که 2 مقدار بایت رو در اون عوض کنم و میتونم این کار رو بکنم با مدول که نوشتم و 2 تا ساب که در این مدول هست (انجام میشه ولی..)

حجم که بالا میره کرش میکنه 

دستور من در حال حاظر این هست در اکتیویتی اسپلش که قبل از اینکه برنامه باز بشه قرار دادم و هر بار هم اجرا میشه ولی پشت اسپلش هست

در اکتیویتی اصلی

 

Dim b1() As Byte
b= arastoomodule.aaa(File.DirInternal ,"arastoo.mp3")
b1(1000) = b1(1000) +1000
b1(1001) = b1(1001) +1001
arastoomodule.bbb(b1,File.DirInternal ,"arastoo.mp3")

که میره در arastoomodule

در ساب های زیر  و مقدار بایت رو عوض میکنه

Sub aaa(Dir As String,Filename As String) As Byte()
Dim input  As InputStream
Dim output As OutputStream
Dim buff() As Byte
input = File.OpenInput(Dir,Filename)
output.InitializeToBytesArray(100000)
File.Copy2(input,output)
buff = output.ToBytesArray
output.Close
Return buff
End Sub

Sub bbb(Buffer() As Byte,Dir As String,Filename As String) As Boolean
Dim output As OutputStream
output = File.OpenOutput(Dir,Filename,False)
output.WriteBytes(Buffer,0,Buffer.Length)
output.Close
Return True
End Sub

مشکلم اینجاست که 

1- میخام کار با ترد رو یاد بگیرم 

2- تو دستور بالا که میخاد بره تو ساب اگر فایلم سنگین باشه در گوشی های قدیمی و رم پایین  کرش میکنه !!!!

میخام ببینم اصلا میشه با ترد حل کرد موضوع رو؟؟

 

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

من نمونه کد هم دادم بهتون توضیح هم دادم ولی باز هم نمیدونم چیرو متوجه نشدین 4تا ساب بیشتر نیست ارسطو جان ، یه عکس درست کردم هم واسه شما و هم واسه بقیه دوستان تا با ساختار AsynkTask آشنا بشن و بتونن خودشون با AsynkTask توی هر مواقعی استفاده کنن

 

 

AsynkTask.png

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

بایگانی شده

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

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

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