PDA

View Full Version : باز کردن فایل متنی



1485159
پنج شنبه 13 خرداد 1389, 23:14 عصر
سلام
من میخوام یه فایل متنی رو سطر به سطر بخونم. راه های زیادی برای این کار وجود داره ولی من میخوام سرعتش زیاد باشه. مهم نیست که چه روشی باشه مهم سرعته خوندنه. چطوری اینکارو بکنم؟

tdkhakpur
جمعه 14 خرداد 1389, 00:54 صبح
خب میتوانید دسترسی به فایل را به حداکثر برسانید تا حالت انتظار هد خواندن از فایل زیاد نباشد.
یعنی داده های بیشتری را در هر مرحله از فایل بخوانید و در RAM جای بدید و پردازش را داخل RAM انجام دهید.
یه نظرم از سرعت کلاس هایی مانند string که قدرت خواندن از فایل داخل ram را دارند را استفاده کنید.

vcldeveloper
جمعه 14 خرداد 1389, 01:52 صبح
سرعتش در چه زمانی بالا باشه؟ هم می تونید از TStringStream استفاده کنید، و هم از TStringList.

1485159
جمعه 14 خرداد 1389, 09:20 صبح
منظورم اینه:
وقتی که ما از memo متنی رو میخونیم سرعتش خیلی کمتر از زمانی هست که ما همان متن رو از رم میخونیم.
من میخوام که یه فایل متنی رو از توی هارد توی رم جای بدم و بعد بخونمش که سرعت خوندن زیاد باشه.

Felony
جمعه 14 خرداد 1389, 09:59 صبح
وقتی که ما از memo متنی رو میخونیم سرعتش خیلی کمتر از زمانی هست که ما همان متن رو از رم میخونیم.
وقتی یک فایل رو تو Memo بارگذاری میکنید عملا فایل رو تو حافظه موقت باز کردید ( رم ) !


من میخوام که یه فایل متنی رو از توی هارد توی رم جای بدم و بعد بخونمش که سرعت خوندن زیاد باشه.
همونطور که گفتم شما وقتی فایلتون رو تو Memo باز میکنید در حقیقت تو رم بازش کردید ولی میتونید از TStringList یا TStringStream که آقای کشاورز هم اشاره کردن استفاده کنید .

tdkhakpur
جمعه 14 خرداد 1389, 19:37 عصر
همونطور که گفتم شما وقتی فایلتون رو تو Memo باز میکنید در حقیقت تو رم بازش کردید
احتمالا 80% به این شکل باشد ولی اگر حجم فایلی که بارگزاری میشود بیشتر از حد مورد انتضار باشد و یا داخل صفحات گسترده مورد استفاده قرار گیرد برای اینکه سرعت دسترسی افزایش پیدا کند مقداری از داده ها داخل هارد بصورت temp قرار میگیرد.

حسین شهریاری
جمعه 14 خرداد 1389, 19:43 عصر
احتمالا 80% به این شکل باشد ولی اگر حجم فایلی که بارگزاری میشود بیشتر از حد مورد انتضار باشد و یا داخل صفحات گسترده مورد استفاده قرار گیرد برای اینکه سرعت دسترسی افزایش پیدا کند مقداری از داده ها داخل هارد بصورت temp قرار میگیرد.

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

tdkhakpur
جمعه 14 خرداد 1389, 19:50 عصر
اون مطلبی که شما فرمودید مربوط به بحث حافظه مجازی است.ببینید سیستم عامل موظف است حافظه را به تمام پروسه ها اختصاص دهد حالا اگه حافظه رم به اون میزان نباشه میاد و اونا با حافظه مجازی شبیه سازی میکنه.در اصل این مشکل خود سیستم عامل هست و به ما هیچ کاری نداره که اون حافظه را سیستم عامل از کجا اختصاص میدهد.پس کاری به هار نداشته باشین.هر اطلاعاتی که شما میبینید پیش خودتون فرض کنین توی رم هست.
آخرش چی شد!!!
خلاصه اش چه سیستم عامل یا خود نرم افزار به حافظه مجازی که شما اشاره کردید پناه می برد همانطور که شما هم میدانید هارد بهترین حافظه مجازی به حساب می آید.
در ضمن فرض برای چی باید بکنیم!!! اینجا مشکل حل سرعت دسترسی به داده هاست.

Felony
جمعه 14 خرداد 1389, 21:22 عصر
خلاصه اش چه سیستم عامل یا خود نرم افزار به حافظه مجازی که شما اشاره کردید پناه می برد همانطور که شما هم میدانید هارد بهترین حافظه مجازی به حساب می آید.
در ضمن فرض برای چی باید بکنیم!!! اینجا مشکل حل سرعت دسترسی به داده هاست.
مدیریت این نوع کارها بر عهده شما نیست که بخواین براش تصمیم گیری کنید ، پس سیستم عامل این وسط چی کاره هستش ؟

وقتی فایلی به صورت Temp روی هارد به صورت موقت قرار میگیره زمان خوندش که از رو هارد خونده نمیشه ، بلکه قبل از استفاده توسط سیستم عامل از هارد به رم منتقل میشه و بعد مورد استفاده برنامه قرار میگیره .

1485159
جمعه 14 خرداد 1389, 21:29 عصر
سرعت TStringStream بیشتره یا TStringList؟ چرا؟

tdkhakpur
جمعه 14 خرداد 1389, 23:35 عصر
سرعت TStringStream بیشتره یا TStringList؟ چرا؟

سرعت TStringList باید بیشتر باشه.
همانطور که داخل اسم کلاس هست stream جزو دستگاههای جانبی یا به قولی میتواند حافظه بیرون از ram باشد لذا برای دسترسی باید یک مرحله کار اضافی برای دسترسی به اده ها انجام دهد ولی stringlist کارهای کمتری نسبت به stringstream با سایر منابع دارد.

vcldeveloper
شنبه 15 خرداد 1389, 00:24 صبح
سرعت TStringStream بیشتره یا TStringList؟ چرا؟
با توجه به کدهای این دو کلاس، قاعدتا سرعت TStringStream باید تا حدودی بیشتر باشه، ولی این تفاوت احتمالا بسیار ناچیز هست. البته من عملا تست نکردم که ببینم مدت زمان لود شدن یک فایل فرضی با هر کدام از این دو چقدر هست.

vcldeveloper
شنبه 15 خرداد 1389, 00:33 صبح
همانطور که داخل اسم کلاس هست stream جزو دستگاههای جانبی یا به قولی میتواند حافظه بیرون از ram باشد لذا برای دسترسی باید یک مرحله کار اضافی برای دسترسی به اده ها انجام دهد ولی stringlist کارهای کمتری نسبت به stringstream با سایر منابع دارد.
ربطی به دستگاه های جانبی نداره؛ stream میتونه بخشی از حافظه، یا هر چیز دیگه ایی باشه. TStringStream از TMemoryStream مشتق شده که اساسا یک کلاس Stream برای داده های موجود در RAM هست. سرعت لود شدن فایل مربوطه در Stream بیشتر هست چون؛ TStringList و TStringStream هر دو برای لود کردن مقادیر از فایل از یک TFileStream استفاده میکنند ، ولی TStringList داده خوانده شده را در یک بافر موقت میریزه، و بعد داده را برای وجود جدا کننده هایی مثل کارکترهای پایان خط جستجو میکنه، و هر خط از متن را در یک خانه از آرایه ایی که به طور داخلی نگهداری میشه، کپی میکنه؛ اما TStringStream این مراحل اضافه را انجام نمیده.