PDA

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



ramin_ramin
چهارشنبه 07 بهمن 1388, 08:04 صبح
با سلام
من در یک برنامه می خواهم یک آرایه 560 میلیون عضوی تعریف کنم
ولی سیستم خطای out of memory را میدهد و امتحان کرده ام که تعریف آرایه تا 299 میلیون عضوی مجاز می باشد
لطفا اگر کسی از دوستان راه چاره این مشکل را میداند لطف کندو به این حقیر هم نشان دهد

ramin_ramin
چهارشنبه 07 بهمن 1388, 08:11 صبح
با سلام
ضمننا ممکن است این تنظیمات سمت سیستم عامل باشد و یا ممکن است
تنظیماتی در دات ویژوال استودیو بخواهد عوض شود
قبلا متشکرم

ASKaffash
چهارشنبه 07 بهمن 1388, 08:45 صبح
سلام
حتما باید آرایه باشد؟ با کمی از دست دادن سرعت به نظر من تبدیل به یک جدول بانک اطلاعاتی کنید بعد عملیات مورد نظر را انجام دهید

ramin_ramin
چهارشنبه 07 بهمن 1388, 08:55 صبح
باید حتما آرایه باشه
چون عدد رندم بدون تکرار می خواهم تولید بکنم
وتا الان هم مشکلی نداشتم
چون حداکثر عضو های این آرایه تا کنون از 240 میلیون تجاوز نکرده بود ولی از هفته پیش بنا به مسائلی تعداد آیتم های این آرایه باید در حدود 560 میلیون باشه
و بع از اینکع این اعداد رندم بدون تکرار رو در بازه 560 میلیون تولید کردم بعد آنها را داخل دیتا بیس میریزم

ASKaffash
چهارشنبه 07 بهمن 1388, 09:25 صبح
سلام
با بانک اطلاعاتی هم میتوانید عدد رندم بدون تکرار تولید کنید اینجوری یک ضرب به بانک میرود

mohsen.net
چهارشنبه 07 بهمن 1388, 10:36 صبح
خوب 2-3 تا آرایه بگیر هر کاری می خوای بکنی رو هر دو بکن

Yasersadegh
چهارشنبه 07 بهمن 1388, 11:17 صبح
سلام دوستان
من هم با نظر دوست عزيزمون ASKaffash موافقم!:تشویق: شما مي تونيد اين كار رو با ديتابيس انجام بديد!! از كجا معلوم كه اگه الان شده 560 ميليون هفته هاي بعد نشه 560 ميليارد! پس از ديتابيس(ترجيحا SQLServer ) استفاده كنيد! بدين شكل كه اعداد رو در فيلد كليد نگه داري كنيد و بعد از توليد هر عدد آن را ذخيره كنيد اگر ذخيره شد كه هيچ:تشویق: اگر نشد يعني تكراري است و با يه try catch مي تونيد عدد بعدي رو توليد كنيد و ذخيره كنيد تا آخر....!!:لبخند:

موفق باشيد:چشمک:

sia_2007
چهارشنبه 07 بهمن 1388, 11:57 صبح
اگر دقیقا بگید میخواهید چه کار کنید میشه راه حل های بهتری داد.
به هر حال استفاده از آرایه ؛ آن هم با 560 میلیون خانه !
پدر CPU با Boxing و UnBoxing در میآد.
به رم که رحم نکردی ؛حداقل از list به جای آرایه استفاده میکردی تا فاتحه CPU رو نخونی
560000000 میلیون خونه اقلا به بیش از 2GB رم احتیاج داره.
تو سیستم 32 بیتی جز با تنظیمات؛ یک برنامه نمیتونه بیش از 2GB مصرف کنه.
تازه چه معلوم این 560000000 خانه ؛ فردا نخواهد بشود 10000000 خانه ؟
---
دوست عزیز ؛ آقای یاسر صادق
فکر میکنید فرستاد 560000000 میلیون دستور INSERT چه بلایی بر سر سیستم در میآورد ؟
تازه اگه الگوریتم ایشون بتواند 560000000 میلیون مقدار غیر تکراری پشت سر هم درست کند؛ و من حدس میزنم با تعداد تکراریها نیاز به 10000000 دستور INSERT است.
در لحظه شما میخواهید Connection رو باز نگه دارید ؟
100% آن جدول هم Lock میشود.
---
این مشکل راه حل زیاد داره که یکی از بهترینهاش Cursor هست.
چون ایشون آخر سر ماحصل کار رو تو دیتابیس ذخیره میکنند.
البته ایشون باید سیستم رو شرح داد.
همین روش در جای دیگه میتونه بدترین روش باشه
---
اصلا چی شد که به این 560 میلیون رسیدید ؟