مشاهده نسخه کامل
: مشكل با ذخيره سازي فايل حجيم
hoseinquest
06-09-2009, 14:56
سلام
من با استفاده از LInq به sql ميخوام يك فايل رو تو يك فيلد varbinary(max) ذخيره كنم . ضمنا Filestream هم فعال هست . منتها با فايلهاي حجيم مثل 400 و 500 مگ مشكل ذخيره سازي دارم . كد هم به شكل زير است :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
هنگاني كه كد اجرا ميشه خطاي :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نمايش داده ميشود
سلام
خوب مشخص و واضح است که مشکل ساز میشود.
اصلاً برنامه نویس باید حد و مرزی معقول برای استفاده از RAM توسط برنامه اش تاین کند.
راه منطقی آن است که با دستور INSERT اطلاعات را درج کنید ولی برای ذخیره دیتاهای بزرگ از UPDATE و به صورت بافری و داخل حلقه استفاده کنید. یعنی مثلاً هر بار 64K از فایلتان را بخوانید و به انتهای دیتهای قبلبی در دیتابیس اضافه کنید و این کار را در یک حلقه انجام دهید تا کل فایل تمام شود و به دیتابیس منتقل شود.
(از دستور WRITE هم میتوانید در T-SQL استفاده کنید.)
hoseinquest
10-09-2009, 05:52
سلام
خيلي ممنونم از جوابتون دوست عزيز
لطف كنيد كمي بيشتر در رابطه با استفاده ازروش بالا در قالب linq به من توضيح بديد متشكر ميشم . خطاي گرفته شده در خط :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نمايش داده ميشه .
ضمنا يك سوال رم سيستم من 2گيگ هستش چرا نميتونه يك فايل 500 مگي رو پردازش كنه ؟
خيلي ممنونم
hoseinquest
10-09-2009, 05:53
سلام
خيلي ممنونم از جوابتون دوست عزيز
لطف كنيد كمي بيشتر در رابطه با استفاده ازروش بالا در قالب linq به من توضيح بديد متشكر ميشم . خطاي گرفته شده در خط :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نمايش داده ميشه .
ضمنا يك سوال رم سيستم من 2گيگ هستش چرا نميتونه يك فايل 500 مگي رو پردازش كنه ؟
خيلي ممنونم
سلام
چند حالت در تاخیر جوابهای تاپیک های من وجود دارد.
1) جواب نیاز به کد و کاری دارد که وقت خالی اش ایجاد نشده.
2) سوال آنقدر کلی است که جواب دادنش تقریباً غیر ممکن است و باز آدم می ماند چه بگوید!
3) فراموشی!
متاسفانه و با عرض شرمندگی تاپیک شما شامل بند آخر شد!
:11::11::11::11::11:
طف كنيد كمي بيشتر در رابطه با استفاده ازروش بالا ...
در ابزاری که مد نظر شما است را نمیدانم ولی اصولاً فرقی ندارد.
روش کلی دستوری شبیه این است:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یعنی فایل بزرگتان را به صورت Stream ای و تکه تکه بخوانید و در قطعه اول از دستور INSERT و برای اضافه کردن قطعات بعدی از سینتکسی مثل فوق استفاده کنید.
رم سيستم من 2گيگ هستش چرا نميتونه يك فايل 500 مگي رو پردازش كنه
1) رم شما مشترک است و برای مدیریت خود ویندوز و سایر سرویس ها و برنامه های موجود هم استفاده میشود و فضای آزاد خالی همیشه کمتر است.
2) وقتی سیستم کار میکند و حافظه تخصیص میدهد و پس میگرد چه به خاطر سرویسهای داخلی و چه برنامه های مشخصی که اجرا میکنید ...
حافظه شما فرگمنت میشود، یعنی راستای بلوک حافظه شما دندانه دندانه خالی و پر خواهد شد و مثلاً شاید بتوانید 2 تکه مجزای 400 مگی پیدا کنید و 800 مگ حافظه خالی داشته باشید ولی نتوانید یک تکه 500 مگی پیدا کنید !
2) اگر شما شرکتی با 2 میلیارد سرمایه داشته باشید و فوراً یک کارمند دون پایه زود از راه برسد و بخواهید 500 میلیون را برای پروژه ای مجهول بگیرید، شما میدهد یا نه؟
مدیر حافظه ویندوز برای مدیریت درخواست های اتی و نیز امنیت و مقاومت در برابر برنامه های مخرب رایانه ای هر درخواستی را بر آورده نخواهد کرد و عدد درخواستی شما باید معقول و منطقی باشد.
موفق باشید.
hoseinquest
18-09-2009, 17:58
سلام
ممنونم از جوابتون در عين فراموشي
با توضيحات قبلي شما من رفتم سراغ اجراي طرح شما در خود محيط برنامه و اين كاررا يعني قسمت قسمت گرفتن اطلاعات را با استفاده از sql انجام ندادم و سعي كردم ابتدا 10 مگ را يگيرم و سپس 10مك 10مك به آن اضافه كنم كه LINQ به من اجازه نميداد . حالا بايد برم فردا محل كار تستش كنم ببيتم روش شما جواب ميده يا نه كه مطمئنا اگر جواب نده من خوب عمل نكردم و دوباره مزاحم شما ميشوم .
ياعلي
سلام
ابتدا 10 مگ را يگيرم و سپس 10مك 10مك
باز هم به نظر من بافرهایتان بزرگ است.
من بودم بسته به شرایط و حجم و تعداد فایل و مشخصات فنی حداقلی رایانه ای که باید بتواند برنامه را اجرا کند و تراکم شبکه و...
برای بافر موقت هر تکه عدد 64KB یا 512KB و حداکثر 1MB را انتخواب میکردم.
(حتی اگر برنامه وبی و asp.net بود که احتمال دارد هزاران کاربر آنلاین داشته شاید بسته ها را کوچک تر هم میکردم !)
موفق باشید.
hoseinquest
18-09-2009, 18:15
هرچه بسته ها كوچكتر باشند يعني تعداد تراكنش ها بيشتر ميشود . براي همين يك فايل (كه من شايد در روزها 100 نوع از اين فايلها داشته باشم) بايد حداقل 500 تراكنش انجام بشه . يعني اكثر ترافيك شبكه من فقط ميره واسه ذخيره سازي فايلم .
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.