PDA

View Full Version : سوال: نوشتن یک آرایه بایت بزرگ توی یک فایل



neda mpr
چهارشنبه 09 مرداد 1392, 12:36 عصر
سلام خسته نباشین، من میخوام یه آرایه از بایتها رو توی یک فایل ذخیره کنم، اومدم توی یک حلقه for تمام عناصر این آرایه رو writeLine کردم. ولی چون طول آرایه خیلی زیاده (2 به توان 28) خیلی تاخیر داره، اینطوری نوشتم:
StreamWriter wr; wr.WriteLine(b[i]);

یه متد هم توی BinaryWriter هست که آرایه رو میگیره و کلش رو مینویسه و دیگه نیاز به حلقه نداره ولی مشکل اون اینه که بایتهارو به صورت کد اسکی مینویسه و پشت سر هم مینویسه من میخوام توی هر خط یه بایت نوشته بشه و کد اسکی نباشه و خیلی سریع باشه
کسی میتونه کمکم کنه؟ ممنون

gwbasic
چهارشنبه 09 مرداد 1392, 16:54 عصر
چرا می خواین توی هر خط یک بایت نوشته بشه منطقی به نظر نمی رسه هدف و نیاز اصلیتون رو مطرح کنید تا دوستان بهتر بتونن راهنماییتون کنن
گاهی اوقات برای حل یک مسئله راهی به ذهنمون می رسه که توی پیاده سازیش به مشکل بر می خوریم و در مورد نحوه پیاده سازیش جستجو می کنیم که این خوبه اما در برخی موارد بهتره همون مسئله اصلی مطرح بشه که شاید راه حل های بهتری به سوال شما داده بشه
بنابراین هنگام زدن تاپیک بهتره اول مسئله اصلی رو مطرح کنید و در ادامه راه حل خودتون رو مطرح کنید و بگید که در پیاده سازیش مشکل دارم در این صورت بیننده تاپیک شما از مسئله اصلی باخبر هست و هم می تونه به در مورد راه حل شما راهنمایی کنه و هم می تونه راه حل های دیگه ای رو (که شاید بهینه تر و ساده تر باشه) مطرح کنه

موفق باشید

neda mpr
جمعه 11 مرداد 1392, 20:56 عصر
اولا خیلی ممنون که جواب دادین، بالاخره یکی پیدا شد به سوالم جواب بده
دوما چون اون فایل رو واسه نرم افزار مطلب میخوام باید عددها زیر هم باشن
میشه راهنماییم کنین؟ مرسی

CsharpNevisi
جمعه 11 مرداد 1392, 21:21 عصر
اولا خیلی ممنون که جواب دادین، بالاخره یکی پیدا شد به سوالم جواب بده
دوما چون اون فایل رو واسه نرم افزار مطلب میخوام باید عددها زیر هم باشن
میشه راهنماییم کنین؟ مرسی

برای این هر کدومو تو یه خط بنویسه بعد از هر عدد یه + "\n" هم بزار ... !!!

CsharpNevisi
جمعه 11 مرداد 1392, 21:22 عصر
برای این هر کدومو تو یه خط بنویسه بعد از هر عدد یه + "\n" هم بزار ... !!!

ای بابا اینجا جای اسلش و n عوض شده ... اینطوری میشه "n\"

sohil_ww
جمعه 11 مرداد 1392, 21:27 عصر
ولی چون طول آرایه خیلی زیاده (2 به توان 28) خیلی تاخیر داره،


میشه بگی واسه چی می خوای این کارو بکنی 1 کم دور از عقل(البته واسه من)

اگه می خوای مکثش محسوس نباشه از نخ استفاده کن

neda mpr
شنبه 12 مرداد 1392, 09:03 صبح
ای بابا اینجا جای اسلش و n عوض شده ... اینطوری میشه "n\"

میدونم باید n\ بزارم، ولی دنبال سریعترین راه هستم،

neda mpr
شنبه 12 مرداد 1392, 09:06 صبح
قبلا گفتم که چون این فایل رو واسه نرم افزار مطلب نیاز دارم باید زیر هم بنویسم یعنی اینطوری از من میخوان! میشه بیشتر توضیح بدین چطوری از نخ استفاده کنم؟ مرسی

massoudghb
شنبه 12 مرداد 1392, 09:22 صبح
استفاده از Thread یا همون نخ ( به صورت تک نخی ) سرعت شمارو افزایش نمیده در واقع در این پروژه ، فقط میتونه به استفاده کننده این حس رو القا کنه که نرم افزار روان کار میکنه ، چون دیگه تا زمان تمام شدن عملیات UI شما قفل نخواهد بود ..
اگر واقعا بخواهید از چند نخی استفاده کنید .. باید به عنوان مثال آرایه تون رو به x قسمت تقسیم کنید .. (مثلن 10 قسمت) و هر قسمت رو با استفاده از نخ مجزایی در یک فایل (مثلن Result_1.txt الی Result_x.txt) ذخیره کنید ..
این روند باعث x برابر شدن سرعت شما خواهد شد که البته در پایان یک زمان n ثانیه ای رو برای ادغام فایل ها نیاز دارید ، البته اگر نیاز به ادغام باشه ..

باز هم مشکلی بود خبر کنید ..

neda mpr
شنبه 12 مرداد 1392, 09:42 صبح
این فایل درسته نهایتا 2 به توان 28 بایت هست ولی من این تعداد رو 65536 تا 65536 تا از lan میخونم و رایت میکنم یعنی مجبورم به صورت سری رایت کنم چون باید از lan بگیرم، نمیتونم موازی بنویسم.
اگه بخوام سری کار کنم بهترین و سریعترین راه کدومه؟
بعضی راهها هستن که یکم سریع هستن مثلا به جای StreamWriter و متد WriteLine از FileStream و متد write استفاده کرد ولی مشکل این روش اینه که بایت رو به صورت کد اسکی مینویسه، چیکار کنم عدد بنویسه؟
مرسی

hamid_hr
شنبه 12 مرداد 1392, 09:42 صبح
به نظر من تاخير به خاطر اينه كه ميخواي دونه دونه وارد فايل كني
اگه همه اون بايت ها رو بتوني داخل يك string[] بريزي به متد System.IO.File.WriteAllLines ميتوني خيلي سريع تر داخل فايل بريزي

massoudghb
شنبه 12 مرداد 1392, 09:51 صبح
اگه بتونی کد رو در اختیار دوستان قرار بدی ، شاید بشه راحت تر نظر داد ، مثلن همین گرفتن len رو اگه بشه حل کرد ،​چند نخی بهترین راهه ..

sohil_ww
شنبه 12 مرداد 1392, 10:14 صبح
همین طور که دوست عزیز منون آقایmassoudghb (http://barnamenevis.org/member.php?10648-massoudghb) متذکر شدن

بهتر از نخ استفاده کنی
و تقریبا روش کارو توضیح دادن ! فقط مونده کد نویسیش که کار شماست اگه خواستید بگید تا آموزش های درباره نخ براتون بزارم

در ضمن آقای massoudghb (http://barnamenevis.org/member.php?10648-massoudghb) ورود دوبارتونو تبریک می گم

massoudghb
شنبه 12 مرداد 1392, 10:18 صبح
ممنونم سهیل عزیزم ..

CsharpNevisi
شنبه 12 مرداد 1392, 12:37 عصر
میدونم باید n\ بزارم، ولی دنبال سریعترین راه هستم،

برای رفتن به خطوط بعدی از همینا استفاده میشه ... بقیه هم اندازه این زمان میبرند .... البته زمانی که برای این ها مصرف میشه اصلا بهچشم نمیان .... همینطوری که دوستان گفتند برای داشتن حالت زنده برنامه میتونی از تردها استفاده کنی یا تو حلقه فورت application.doevent بزاری ... !!!