PDA

View Full Version : حرفه ای: سرعت بازگذاری فایل



Iman129080
پنج شنبه 01 تیر 1391, 06:31 صبح
با سلام خدمت همه شما دوستان
سوالی که من داشتم در این رابطه است که چطور می تونم یه فایل رو به صورت باینری در یک تکست باکس لود کنم اونم با کمترین زمان
برای مثال همه شما با برنامه هگز ادیتور کارکردید وقتی شما یه فایل مانند عکس و فیلم در داخل این برنامه لود می کنید ظرف چند ثانیه شما به کد هگز دست پیدا می کنید ولی من می خواستم یه فایل که حجمش حدود 24 مگابایت بود رو داخل یه تکست باکس توی وی بی لود کنم که 20 دقیقه طول گشید ولی همین فایل رو با هگز ادیتور ظرف چند ثانیه بارگذاری کردم.
حالا من می خوام بدونم چطور می تونم سرعت لود کردن اطلاعات رو در وی بی زیاد کنم تا مثل هگز ادیتور اطلاعات رو ظرف چند ثانیه در تکست باکس به صورت باینری لود کنه.
با تشکر

Dim FH As Integer
Dim I As Long
Dim Data() As Byte
LenF = 0

FH% = FreeFile
Open "C:\Users\Iman Fazli\Desktop\New folder (2)\A.pdf" For Binary As #FH%
LenF = LOF(FH%)
ReDim Data(0 To LenF - 1)
Get FH%, , Data
Do While (Not (EOF(FH)))
Text1.Text = Text1.Text & Data(I) & ","
I = I + 1
Loop
Close #FH%

Iman129080
جمعه 02 تیر 1391, 15:05 عصر
کسی جواب سوال ما رو نمیدونه.

سید حمید حق پرست
جمعه 02 تیر 1391, 16:01 عصر
سلام علیکم

دوست عزیز فقط کافیه DoEvents رو قبل از loop قرار بدید .
کد :


Private Sub Command1_Click()
Dim FH As Integer
Dim I As Long
Dim Data() As Byte
LenF = 0

FH% = FreeFile
Open "C:\Users\Iman Fazli\Desktop\New folder (2)\A.pdf" For Binary As #FH%
LenF = LOF(FH%)
ReDim Data(0 To LenF - 1)
Get FH%, , Data
Do While (Not (EOF(FH)))
Text1.Text = Text1.Text & Data(I) & ","
I = I + 1
DoEvents
Loop
Close #FH%
End Sub

موفق باشید

یا علی (ع)

محسن واژدی
جمعه 02 تیر 1391, 16:47 عصر
برای مثال همه شما با برنامه هگز ادیتور کارکردید وقتی شما یه فایل مانند عکس و فیلم در داخل این برنامه لود می کنید ظرف چند ثانیه شما به کد هگز دست پیدا می کنید ولی من می خواستم یه فایل که حجمش حدود 24 مگابایت بود رو داخل یه تکست باکس توی وی بی لود کنم که 20 دقیقه طول گشید ولی همین فایل رو با هگز ادیتور ظرف چند ثانیه بارگذاری کردم.
حالا من می خوام بدونم چطور می تونم سرعت لود کردن اطلاعات رو در وی بی زیاد کنم تا مثل هگز ادیتور اطلاعات رو ظرف چند ثانیه در تکست باکس به صورت باینری لود کنه.

سلام علیکم
عموما زمان بارگذاری کامل یک فایل در برنامه بسته به افزایش فضای فایل افزایش میابد، که به طبع آن میزان فضای رم مصرفی هم بیشتر میشود (و این بدون استثناء در همه برنامه ها یکسان هست). ویرایشگرهای هگز هم از یک ترفند برای بارگذاری استفاده میکنند، به عبارتی همه محتویات فایل را یکباره بارگذاری نمیکنند، و بسته به مکانی که کاربر با جابجا کردن اسکرول بار درخواست کرده است مقدار محتویات موجود در آن موقعیت را بارگذاری و نمایش میدهند.

شاید اگر کد را بصورت زیر ویرایش کنیم سرعت بارگذاری بیشتر شود:

Private Sub Command1_Click()

Dim FH As Integer

Dim I As Long

Dim Data() As Byte

LenF = 0

FH% = FreeFile
Text1 = ""

Open "C:\Users\Iman Fazli\Desktop\New folder (2)\A.pdf" For Binary As #FH%

LenF = LOF(FH%)

ReDim Data(0 To LenF - 1)

Get FH%, , Data
Text1.SelStart = Len(Text1)
Do While (Not (EOF(FH)))
Text1.SelText = Data(I) & ","
I = I + 1
DoEvents
Loop

Close #FH%

End Sub


البته استفاده از SelStart مشکلاتی هم در پی دارد اما بهرحال برای افزایش سرعت بارگذاری مناسب است

موفق باشید

Veteran
جمعه 02 تیر 1391, 16:53 عصر
با سلام.
DoEvents کارش افزایش سرعت نیست.
http://barnamenevis.org/showthread.php?152798-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-DoEvents&p=697754#post697754

محسن واژدی
شنبه 03 تیر 1391, 00:05 صبح
با سلام.
DoEvents کارش افزایش سرعت نیست.
http://barnamenevis.org/showthread.php?152798-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-DoEvents&p=697754#post697754

سلام علیکم

اگر منظورتان توضیحات بنده است، منظور بنده از افزایش سرعت بارگزاری استفاده از DoEvents در کدها نیست، منظور بنده از افزایش سرعت استفاده از SelText در اضافه کردن رشته ای به متن است، بدون آنکه مجبور به قرار دادن مجدد متن فعلی در رم باشیم، چرا که این امر همزمان با افزایش متن فعلی موجب کاهش سرعت و طولانی تر شدن زمان بارگذاری میشود

موفق باشید

Veteran
شنبه 03 تیر 1391, 00:09 صبح
نه اقای واژدی.برای اقای حق پرست گفتم.

Iman129080
شنبه 03 تیر 1391, 00:20 صبح
من از تمامی دوستانی که برای من وقت گذاشتم کمال تشکر رو دارم.
من روش هایی که شما دوستان عزیز گفتید رو تست می کنم نتیجه رو اعلام می کنم.
بازم ممنون.

سید حمید حق پرست
شنبه 03 تیر 1391, 00:38 صبح
نه اقای واژدی.برای اقای حق پرست گفتم.
سلام علیکم

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

وگرنه این اموزش DoEvents توسط خودم که خیلی قبل گذاشتم :

http://barnamenevis.org/showthread.php?331943-DoEvents-%D8%B1%D8%A7-%D8%AF%D8%B1-%DA%86%D9%87-%D9%85%D9%88%D8%A7%D9%82%D8%B9%DB%8C-%D8%A8%D9%87-%DA%A9%D8%A7%D8%B1-%D9%85%DB%8C-%D8%A8%D8%B1%DB%8C%D9%85%D8%9F&highlight=DoEvents

موفق باشید

یا علی (ع)

Iman129080
شنبه 03 تیر 1391, 02:53 صبح
با سلام خدمت تمامی دوستان

من برنامه رو امتحان کردم با جواب آقای محسن واژدی (http://barnamenevis.org/member.php?104729-%D9%85%D8%AD%D8%B3%D9%86-%D9%88%D8%A7%DA%98%D8%AF%DB%8C) تمام مشکلات حل شد و این نکته رو یادگرفتم که در دستور زیر

Text1.Text = Text1.Text & Data(I) & ","

برنامه مقدار قبلی رو در رم میریزه و مجددا در تکست باکس نمایش میده و این خودش کلی زمان رو به هدر میده و من لازم دونستم از آقای محسن واژدی (http://barnamenevis.org/member.php?104729-%D9%85%D8%AD%D8%B3%D9%86-%D9%88%D8%A7%DA%98%D8%AF%DB%8C) تشکر ویژه کنم. ولی من هنوز از سرعت بارگذاری راضی نیستم.

یه نکته رو که من بررسی کردم و متوجه اون شدم اینه که تمام مشکلات از خود همین تکست باکس هست من یه آزمایش انجام دادم
در ابتدا به فایل 10000 بایتی رو لود کردم و با استفاده از کد ویرایش شده اقای محسن واژدی (http://barnamenevis.org/member.php?104729-%D9%85%D8%AD%D8%B3%D9%86-%D9%88%D8%A7%DA%98%D8%AF%DB%8C) دوباره برنامه رو تست کردن یه چیزی حدود 10 ثانیه طول کشید تا اطلاعات رو به طور کامل درون تکست باکس ریخت.
بعد از اون من اومدم یه Picture Box به فرمم اضافه کردم و کد زیر رو:

Text1.SelText = Data(I) & ","

با کد زیر جایگزین کردم:

pic1.Print Data(I) & ","

و اینبار زمان لود شدن اطلاعات به چیزی حدود 3 ثانیه شد که مطمئننا خیلی بهتره.

حالا من شما دوستان عزیز میخوام خواهش کنم تا به من بگین آیا راهی هست که از یه Picture Box مثل یه تکست باکس استفاده کرد.
من کارایی که از Picture Box میخوام اینه که فقط بتونم اطلاعات رو درون اون نشوم بدم و اون رو اسکرول کنم همین

بازم ممنون

Iman129080
یک شنبه 04 تیر 1391, 18:57 عصر
کسی نبود جواب سوال ما رو بده