PDA

View Full Version : استفاده از آرایه بسیار بزرگ



smt1383
پنج شنبه 05 فروردین 1389, 11:28 صبح
با سلام خدمت دوستان
من در یک برنامه باید مقدار بسیار زیادی از اطلاعات را از پورت سریال بخوانم و پس از خواندن در بانک اطلاعاتی ذخیره کنم. چون اطلاعات ورودی تقریباً 10 تا 800000 بایت هست من نیاز دارم تا 10 تا آرایه 800000 بایتی تعریف کنم و پس از ریختن اطلاعات در این آرایه ها، اگر کاربر خواست اطلاعات دریافتی در بانک اطلاعاتی ذخیره گردد.
حال سوال من اینست آیت تعریف کردن 10 تا آرایه 800000 بایتی کار معقولی است؟ آیا امکان ندارد به علت بزرگ بودن آرایه ها، با هم همپوشانی پیدا کنند و اطلاعات غیر معتبر به کاربر بدهند.
ممنون می شوم اگر دوستان راهنمایی کنند.

sds1920
پنج شنبه 05 فروردین 1389, 14:09 عصر
مطمئا تعریف کردن 10 تا آرایه با ظرفیت تقریبا 800KB کار عقلانه ای نیست.
من نمی دونم دادهات از چه نوعی هستند.ولی راهی که به نظر من می رسه اینه که 10 تا فایل تعریف کنی و به محض گرفتن داده ها از پورت ها اونهار رو توی فایل مورد نظر ذخیره کنی.
هر زمانی که نیار بود اونها رو توی بانک ذخیره کنی و اگر نیاز نبود اونها رو حذف کنی.اینجوری بیهوده فضای Ram رو از بین نمی بری.

FastCode
پنج شنبه 05 فروردین 1389, 18:24 عصر
همپوشانی
این عملا" و تئورا" و کلا" غیر ممکنه.

smt1383
جمعه 06 فروردین 1389, 01:11 صبح
اما مشکل من این است که این اطلاعات با سرعت بسیار بالا باید دریافت شوند. مثلاً با سرعت بالای پورت USB یعنی حدود 480 Mbit/s . به همین خاطر امکان اینکه اطلاعات را مستقیماً داخل یک فایل یا دیتابیس ذخیره کنم وجود ندارد و باید ابتدا اطلاعات را مثلاً به RAM منتقل کنم و پس از آن با در اختیار داشتن زمان کافی به داخل دیتابیس یا یک فایل بریزم.
با تشکر

FastCode
جمعه 06 فروردین 1389, 01:42 صبح
شم باید یه سیستم paging و blob managing توی memory طراحی کنی تا کارت راه بیافته.(اگر وقت داشتم برات میکردم.)
راستی نظرت راجع به sqlite چیه؟

mehdi.mousavi
جمعه 06 فروردین 1389, 02:53 صبح
با سلام خدمت دوستان
من در یک برنامه باید مقدار بسیار زیادی از اطلاعات را از پورت سریال بخوانم و پس از خواندن در بانک اطلاعاتی ذخیره کنم. چون اطلاعات ورودی تقریباً 10 تا 800000 بایت هست من نیاز دارم تا 10 تا آرایه 800000 بایتی تعریف کنم و پس از ریختن اطلاعات در این آرایه ها، اگر کاربر خواست اطلاعات دریافتی در بانک اطلاعاتی ذخیره گردد.
حال سوال من اینست آیت تعریف کردن 10 تا آرایه 800000 بایتی کار معقولی است؟ آیا امکان ندارد به علت بزرگ بودن آرایه ها، با هم همپوشانی پیدا کنند و اطلاعات غیر معتبر به کاربر بدهند.
ممنون می شوم اگر دوستان راهنمایی کنند.

سلام.
برای اینکار نیازی نیست تا آرایه ای با تعداد عناصر بالا کنار بذارید. اگر 801KB بشه، چه کاری انجام خواهید داد؟ قاعدتا شما با گرفتن دو Buffer با سایز کوچک، می تونید به هدفتون برسید. ابتدا Worker Thread ای بسازید که داده ها رو از سریال پورت بصورت مداوم دریافت کنه و در Buffer اول بریزه. سپس Buffer اول رو برای پردازش، به Worker Thread دوم بدید، و اونو خالی کنید تا پس از پر شدن Buffer دوم توسط Worker Thread اول، بتونه داده ها رو توی Buffer اول بریزه... بعد از نوشتن کد، میتونید برای بدست آوردن سایز بهینه این دو بافر، آزمایشهای متعددی کنید تا بر اساس نرخ ورودی، و سرعت پردازش، Worker Thread دوم عقب نیفته.
بدین ترتیب، Worker Thread دوم همواره داره Buffer ای رو پردازش میکنه، در حالیکه Worker Thread اول، داره همزمان داده های دریافتی رو در یک Buffer دیگه قرار میده...

موفق باشید.