PDA

View Full Version : خواندن فایل با بیشترین سرعت؟؟



Delphi-Man
یک شنبه 28 تیر 1388, 07:29 صبح
با سلام
می دونید که برای خوندن فایلی که به صورت هگزه چندین روش وجود داره... TFileStream ضعیف ترینشونه. سریعترینشون کدومه؟

tdkhakpur
یک شنبه 28 تیر 1388, 11:12 صبح
سلام
چه کسی گفته TFileStream ضعیف هست این کلاس حالت استاندارد برای خواندن فایل را دارد.
ولی در مورد سوال شما برای خواندن hex باید عرض کنم که خواند فایل به هر صورتی که باشد به نوع فایل بستگی ندارد ولی آنچه که برای شما باعث سوال شده این هست که خواندن سریع فایل می باشد که در این صورت باید فایل شما دارای خاصیت باشد تا روشی برای سریع خواندن داشته باشد. ولی اگر الزاما می خواهید فایل را از ابتدا تا انتهای آن بخوانید از کلاس فوق میتوانید استفاده کنید.

vcldeveloper
یک شنبه 28 تیر 1388, 11:38 صبح
TFileStream ضعیف ترینشونه
بله؟!!!!! چطور به این نتیجه شگفت انگیز رسیدید؟!

Delphi-Man
یک شنبه 28 تیر 1388, 14:45 عصر
ای کاش می تونستم برنامم رو با سورس یکی با FileStream یکی MemoryStream و ... نشون بدم تا بهتون این حرف ثابت بشه. البته من یه for میذارم از اول تا آخر فایل و بعد seek میکنم بعد با Read یکی یکی کرکتر ها رو می خونم و کارهایی که باید روشون انجام بشه رو انجام میدم. به احتمال زیاد کم بودن سرعت filestream به خاطر اینه که با هر بار اجرای read از روی هارد دیسک می خونه ولی memorystream فایل رو اول کامل میاره روی رم بعد از روی رم می خونه که مسلما سرعتش بالاتر میشه. ولی این موضوع رو به عینه دیدم. ولی بازم اونطوری که می خوام نیست... اگه با read یک جا مثلا 10 تا کرکتر رو بخونم و بعد با for بررسیش کنم بهتر میشه؟ (با همون TMemoryStream)

vcldeveloper
یک شنبه 28 تیر 1388, 15:32 عصر
بستگی داره چه کاری بخواید انجام بدید. بطور عادی، می تونید با FileStream یک بخشی از فایل را در یک بافر بریزید، و روی آن پردازش انجام بدید. اگر حجم فایل ها کم هست، یا لازم هست که در پردازش های مختلف دائما بخش هایی از فایل را در حافظه لود کنید، اون وقت استفاده از MemoryStream ارجحیت داره، چون یک بار کل فایل را Read میکنه، و در دسترسی های بعدی شما فقط با RAM کار می کنید، نه با هارد دیسک.

AliReza Vafakhah
یک شنبه 28 تیر 1388, 15:37 عصر
ای کاش می تونستم برنامم رو با سورس یکی با FileStream یکی MemoryStream و ... نشون بدم تا بهتون این حرف ثابت بشه. البته من یه for میذارم از اول تا آخر فایل و بعد seek میکنم بعد با Read یکی یکی کرکتر ها رو می خونم و کارهایی که باید روشون انجام بشه رو انجام میدم. به احتمال زیاد کم بودن سرعت filestream به خاطر اینه که با هر بار اجرای read از روی هارد دیسک می خونه ولی memorystream فایل رو اول کامل میاره روی رم بعد از روی رم می خونه که مسلما سرعتش بالاتر میشه. ولی این موضوع رو به عینه دیدم. ولی بازم اونطوری که می خوام نیست... اگه با read یک جا مثلا 10 تا کرکتر رو بخونم و بعد با for بررسیش کنم بهتر میشه؟ (با همون TMemoryStream)

بی خال حلقه for شو و به صورت بازگشتی عمل کن حال ببین سرعت چه طوره ؟

موفق باشی

Delphi-Man
یک شنبه 28 تیر 1388, 18:53 عصر
اصلا فهمیدم چرا سرعتش کند بود... سرعت کند بخاطر TMemoryStream نبود... بخاطر یه تابع به نام CloneComponent بود که از همین سایت گرفتم... باعث میشد وقتی 400 نوشته می خواد runtime ایجاد بشه سرعتش به صورت چشمگیری کاهش پیدا کنه... در عرض 3 یا 4 ثانیه لود بشه در حالی که باید کمتر از 1 ثانیه این 400 تا ایجاد بشن... ممنون از راهنمایی دوستان گرامی. در ضمن چون این فایلی که قرار بود باز بشه پروژه سیو شده بود بنابراین حتی 1 مگ هم به زور میشه اگه خیلی شیء به کار ببرن و کلی برنامه نویسی کنن و... :چشمک: