PDA

View Full Version : بهترین راه ذخیره سازی حجم لالایی از اطلاعات



smt1383
دوشنبه 22 شهریور 1389, 12:17 عصر
با سلام
من حجم زیادی اطلاعات دارم مثلاً 100 تا آرایه 100000 تایی و می خواستم این اطلاعات را ذخیره کنم و هر زمان کاربر خواست دوباره آنرا لود کنم. بهترین و اصولی ترین روش برای این کار چه روشیه؟ من فعلاً این اطلاعات را درون فایل های text ذخیره می کنم (هر آرایه درون یک فایل) اما مشکل زمان زیادی است که این کار می گیرد . مخصوصاً لود کردن آنها که زمان بیشتری را می گیرد (البته برای ذخیره کردن در فایل متنی در یک حلقه for یکی یکی اعضای آرایه را در فایل متنی write می کنم) آیا دوستان روش بهتری سراغ دارند؟
ممنون

fjm11100
دوشنبه 22 شهریور 1389, 12:50 عصر
با thread های مختلف فایلها را جداگانه لود کن. در ضمن روش لود کردنت چیه؟

smt1383
دوشنبه 22 شهریور 1389, 13:19 عصر
برای load کردن از کلاس Stream reader و متد ReadToEnd همه اطلاعات یک فایل را داخل یک متغیر string می ریزم و سپس اعضای آرایه را از آن استخراج می کنم.

fjm11100
دوشنبه 22 شهریور 1389, 13:26 عصر
پس چند تردی لود کن یا از یک دیتابیس استفاده کن که درگیر پیچیدگی پیاده سازی نشی

smt1383
دوشنبه 22 شهریور 1389, 13:35 عصر
ممنون از راهنماییتان
برای چند تردی، مثلاً اگر بخواهم 10 تا فایل بزرگ را در 10 ترد جداگانه لود کنم و هر کدام را در یک آرایه بریزم آیا می شود یک فقط یک تابع مثلاً :


public byte[] LoadData(string path)
{

}

تعریف کنم و سپس هر کدام از Thread ها از این تابع استفاده کنند یا باید 10 تابع جداگانه تعریف کنم و هر ترد از یکی از این توابع استفاده کند؟

fjm11100
دوشنبه 22 شهریور 1389, 13:38 عصر
میتونی فقط مواظب عناصر استاتیک باش چون یک کپی بیشتر از اونا توی حافظه نیست و اگر تردی تغییرشون بده همه تردها این تغییر را حس می کنند.

smt1383
دوشنبه 22 شهریور 1389, 13:45 عصر
یعنی اگر داخل این تابع، متغیرهای غیر استاتیک باشند برای هر کدام از thread ها جداگانه نگهداری می شوند. به تعبیر دیگه یعنی 10 تا کپی جداگانه از این تابع به صورت کاملاً مستقل از هم (با متغیرهای داخلی مستقل) اجرا می شوند و هر کدام یک مقدار را به ترد خودشان برمی گردانند؟ درست فهمیدم؟

C Sharp
دوشنبه 22 شهریور 1389, 14:08 عصر
به نظرم صفحه بندی اطلاعات تو این موارد راه حل بهتریه ، چون شما حتی اگه از 1000 ترد هم استفاده کنین ، باز همون پروسز رو میکشه ، اطلاعاتتون رو مثلا 20 تا 20 تا به کاربر نمایش بدین و همینطور ذخیره کنین

Reza_Yarahmadi
دوشنبه 22 شهریور 1389, 14:09 عصر
پيشنهاد من اينه كه كلا حلقه و فايل متني و ... بيخيال بشيد و برديد سراغ Serialize
لينك زير رو يه نگاهي بندازيد
http://www.barnamenevis.org/forum/showthread.php?t=200255

C Sharp
دوشنبه 22 شهریور 1389, 14:40 عصر
پيشنهاد من اينه كه كلا حلقه و فايل متني و ... بيخيال بشيد و برديد سراغ Serialize
لينك زير رو يه نگاهي بندازيد
http://www.barnamenevis.org/forum/showthread.php?t=200255

اگه ممکنه ارتباطش رو با مشکل دوستمون توضیح بدین !

Reza_Yarahmadi
دوشنبه 22 شهریور 1389, 14:47 عصر
با استفاده از Serialize آرايه رو به يك Stream تبديل و ذخيره كنيد. زمان خوندن هم كل فايل ذخيره شده رو بخونيد و با Deserialize كردن به همون آرايه تبديلش كنيد (بدون حلقه ، بدون ترد)

C Sharp
دوشنبه 22 شهریور 1389, 14:59 عصر
من فعلاً این اطلاعات را درون فایل های text ذخیره می کنم (هر آرایه درون یک فایل) اما مشکل زمان زیادی است که این کار می گیرد . مخصوصاً لود کردن آنها که زمان بیشتری را می گیرد
ممنون

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

میشه بگید سریالایز کردن چه کمکی به حل مشکل دوستمون میکنه ؟
به جز اینکه حتی زمان بیشتری رو هدر میده تا اطلاعات رو سریالاز و دیسریالایز کنه!

fjm11100
دوشنبه 22 شهریور 1389, 15:15 عصر
درسته.
اما در مورد سریالایز کردن فکر کنم دوستان مورد استفاده اشتباهی براش پیدا کردن! هرچند امکانپذیره اما برای این کار نبوده که اگه بود دیگه فایل config و configuration نبود یا اساسا save کردن تغییر میکرد. اون برای سریالی کردن object است و بهترین مورد استفاده که بطور مثال میشه گفت در وب سرویسها است.