PDA

View Full Version : سوال: بهینه سازی سرعت دریافت



علیرضا حسن زاده
شنبه 03 مهر 1389, 08:14 صبح
با سلام خدمت اساتید
من یه برنامه نوشتم که فایل های رو تو دیتابیس SQL2005 به عنوان یه فیلد ذخیره میکنه و با نرم افزار کلاینت کاربرا اون فایلها رو دریافت می کنن با ADSL مشکلی ندارم ولی در دریافت با DialUp بعد دریافت مقداری از اطلاعات TimeOut میشه و ارتباط قطع میشه برای رفع این مشکل تو برنامه کلاینت رو تغییر دادم به طوری که اطلاعات رو توسط یک پروسیجر از SQL با تایع Substring بگیره او این تابع ایتدا و طول آفست رو می دم و اطلاعات رو دیافت می کنم ولی سرعت خیلی پایین میاد می خوام بدونم چطوری می تونم طول داده رو برای تابع بع صورت بهینه محاسبه کنم که هم بالا ترین سرعت دریافت رو داشته باشه هم به علت سرعت کم DialUp دیگه TimeOut نشه؟
یعنی اگه ممکن باشه سرعت دریافت رو به صورت Dynamic تشخیص بده

علیرضا حسن زاده
شنبه 03 مهر 1389, 18:11 عصر
سوال رو توبخش شبکه مطرح کردم گفتن برو تو بخش برنامه نویسی اینجا هم اومدم انگار کسی نمی خواد جواب بده؟

Reza_Yarahmadi
شنبه 03 مهر 1389, 19:21 عصر
چیزی که میگم رو تا الان امتحان نکردم ولی به هر حال یک ایده است
شما میتونید اندازه بافر رو از طرف برنامه به سرور پاس بدید ، اول کار و زمان شروع دریافت از حداقل بافر استفاده کنید و مدت زمان دریافت رو حساب کنید اگر این مدت زمان از مدت زمان TimeOut (معمولا 30 ثانیه) کمتر بود برای بسته بعدی اندازه بافر رو افزایش بدید. این کار رو تا جایی انجام بدید که زمان دریافت مقداری کمتر از زمان TimeOut یاشه. مراحل وصل شدن به بانک رو توی یه try - catch بذارید و توی بلاک catch هم چک کنید اگر TimeOut رخ داده اندازه بافر رو کم کنید.

علیرضا حسن زاده
شنبه 03 مهر 1389, 19:30 عصر
خوبه که باز شما یه راه حل دادی؟!

flash118
شنبه 03 مهر 1389, 21:43 عصر
دوست خوبم منم همین مشکل رو داشتم
بعد یه خورد انگولک کردن و بازی که در اثر اشتباهم یه کامپیوتر رو هم از بین برد به این نتیجه رسیدم که از catch استفاده کنم با همون روش که تو اسمبلی پاس کرده بودم یعنی استفاده از ثبات های پرچم منظورم هست خوب می دونیم که در هر دوره اگه با اون سرعت کم ارسال بشه باز time out میشیم جالا اون اطلاعاتی که به زحمت اومدم تا هر جایی که اومده رو باید نگه داریم تا در دفعه بعد باز از اول به ما سند نکنه من مقادیر آخرین رسید رو علامت می زدم در اولین تماس دوم از جایی که مونده دریافت می کردم الته باید یه catch برا خودتون به صورت مجازی ایجاد کنین که فقط شما بتونید به اون دسترسی داشته باشین اگه آزاد باشه این روش به دردی نمی خوره امیدوارم توصیحاتم ره گشا باشید ببخشید که نتونستم سورس قرار بدم چون برنامه تحت حمایت شرکت فوق هست و اوپن نیست بازم معذرت یا حق