PDA

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



مهران رسا
جمعه 03 دی 1389, 00:47 صبح
از کنترل Idhttp به صورت زیر استفاده میکنم :



St := TMemoryStream.Create;
try
HT := tidhttp.Create(nil);
try
HT.OnWorkBegin := IdHTTPWorkBegin;
HT.OnWork := IdHTTPWork;
HT.OnWorkEnd := IdHTTPWorkEnd;
HT.Get('http://........', St);
finally
HT.Free;
end;
finally
St.Free;
end;

اما سرعت دریافت اطلاعات خیلی پایین هست . راهی برای افزایش سرعت وجود داره ؟ مثلاً زیاد کردن مقدار Chunk و ...

ممنون

BORHAN TEC
شنبه 04 دی 1389, 13:51 عصر
برای این کار بهتر است که تعداد تردهایی که فایل را دریافت میکنند بیشتر از یک عدد باشد. من تا به حال با indy این کار را نکرده ام ولی در RemObjects SDK یک مثال در این رابطه وجود دارد. البته اگر تعداد تردها هم خیلی زیاد باشد نتیجه عکس خواهید گرفت!!! به نظر من بهتر است که تعداد تردها حدود 5 عدد باشد.

Felony
شنبه 04 دی 1389, 14:24 عصر
پکیج Clever Internet Suite (http://www.clevercomponents.com/products/inetsuite/components.asp) هم ابزارهای خوبی برای کار با اینترنت ( منجمله دانلود ) در اختیارتون میزاره ، البته من باهاش کار نکردم ولی زیاد تعریفش رو شنیدم .

مهران رسا
شنبه 04 دی 1389, 23:03 عصر
پکیج Clever Internet Suite (http://www.clevercomponents.com/products/inetsuite/components.asp) هم ابزارهای خوبی برای کار با اینترنت ( منجمله دانلود ) در اختیارتون میزاره ، البته من باهاش کار نکردم ولی زیاد تعریفش رو شنیدم .

بله ؛ با وجود دردسری که برای استفاده از این کامپوننت کشیدم فوق العاده بود .

vcldeveloper
شنبه 04 دی 1389, 23:23 عصر
به نظر من بهتر است که تعداد تردها حدود 5 عدد باشد. بهترین تعداد Thread برای انجام یک کار چیزی نیست که بر اساس حدس و گمان گفته بشه.


اما سرعت دریافت اطلاعات خیلی پایین هست . راهی برای افزایش سرعت وجود داره ؟می تونید از Range header (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35) در درخواست HTTP خودتان استفاده کنید. در اون صورت می تونید با هر درخواست حجم مشخصی از فایل را دریافت کنید. اینطوری می تونید چند درخواست مختلف به طور همزمان به سرور ارسال کنید، و هر درخواست بخش خاصی از فایل را دریافت کنه. در سمت کلاینت هم برای افزایش کارایی، می تونید یک فایل با حجم فایل موجود در سرور ایجاد کنید، و هر درخواستی که جواب دریافت کرد، محتوای جواب را در آدرس مربوط به محدوده همان درخواست در فایل بنویسه. برای دریافت حجم فایل دانلودی قبل از شروع دانلود هم می تونید یک درخواست برای دریافت Header اون فایل ارسال کنید. در اون صورت، سرور فقط Header فایل را برای شما ارسال میکنه. در Header فایل، content-length حجم فایل مربوطه را مشخص میکنه. با دانستن حجم فایل، می تونید مشخص کنید که فایل باید به چه قطعاتی برای دانلود تقسیم بشه.