А нахрена 1000 потоков если и 300 упирается в лимит траффа? Инди дохрена процессорного времени отбирает?
Это от канала зависит и от размера страниц. Может и 1к потоков не весь канал забивать, примеры есть. Слишком много ошибок начинает появляться при большом количестве потоков.
Нет, проверял, даже при большом количестве (+ 400) разницы нет. Проблема с инди в том что много логических ошибок, у меня на 9 основные исправлены, пока не замечал. А так использовать можно И кстати если при большом количестве у вас начинает в инди сыпаться мног ошибок - скорее всего плохая синхронизация потоков. Есть в инди одно узкое конечно место где все потоки сходятся, но там всё идеально сделано.(Файл IdComponent.pas, создание класса) Там речь идёт о критической секции и прикол в том что на XP(ещё где хз) при огромном количестве потоков эти критические секции(по сути системные объекты) глючат(пропускают потоки, когда главный поток блокирует), не объяснимо но факт. Может там трабла, я хз.
Не помню какое на XP хом эдишн стоит ограничение на использование активных TCP соединений, но не высокое.
С синхронизацией все нормально. В инди проблемы в основном при использовании прокси. Я win2003 использую обычно )
как плавно съехали с gzip.. по сабжу: что-то GZDecompressStr не хочет работать с результатом GZCompressStr.. Data Error! В чем прикол?
Вот нашел в нете функцию позволяющую распаковывать gzip без заголовка(10 байт) и окончания (8 байт=CRC32+длинна исходного текста). На залил ру ответ без окончания. а вообще ошибка возникала из-за того что в TZDecompressionStream используется InflateInit_ в котором по-умолчанию стоит windowBits=15, а нужно windowBits=-15 , что и указывается в InflateInit2_ (хотя сам адлер пишет что этот параметр должен быть в диапазоне 8..15). Вот код: Code: function InflateInit2(var stream: TZStreamRec; windowBits: Integer): Integer; begin result := InflateInit2_(stream,windowBits,ZLIB_VERSION,SizeOf(TZStreamRec)); end; function ZDecompressCheck(code: Integer): Integer; begin Result := code; if code < 0 then begin raise EZDecompressionError.Create(_z_errmsg[2 - code]); end; end; procedure GZDecompress(const inBuffer: Pointer; inSize: Integer; out outBuffer: Pointer; out outSize: Integer; outEstimate: Integer = 0); var zstream: TZStreamRec; delta : Integer; begin FillChar(zstream,SizeOf(TZStreamRec),0); delta := (inSize + 255) and not 255; if outEstimate = 0 then outSize := delta else outSize := outEstimate; GetMem(outBuffer,outSize); try zstream.next_in := inBuffer; zstream.avail_in := inSize; zstream.next_out := outBuffer; zstream.avail_out := outSize; ZDecompressCheck(InflateInit2(zstream, -15)); try while ZDecompressCheck(inflate(zstream,Z_NO_FLUSH)) <> Z_STREAM_END do begin Inc(outSize,delta); ReallocMem(outBuffer,outSize); zstream.next_out := PAnsiChar(Integer(outBuffer) + zstream.total_out); zstream.avail_out := delta; end; finally ZDecompressCheck(inflateEnd(zstream)); end; ReallocMem(outBuffer,zstream.total_out); outSize := zstream.total_out; except FreeMem(outBuffer); raise; end; end; function GZDecompressStr(const s: AnsiString): AnsiString; var buffer: Pointer; size : Integer; begin GZDecompress(PChar(s),Length(s),buffer,size); SetLength(result,size); Move(buffer^,result[1],size); FreeMem(buffer); end; procedure TForm1.Button6Click(Sender: TObject); var ss,s,reply:string; begin Здесь получаем ответ через winsocks ........ reply:=copy(reply,pos('6da',reply),1757); //или по-другому. Главное чтобы в reply остался '6da' . s := Copy(reply, 11, Length(reply)-10); ss:=GZDecompressStr(s); Memo1.Text:=ss; end;
Нашел вышеуказанные функции в ZLibExGZ, но прикрутить к моей Delphi 7 не удается, видимо модуль ориентирован на 2010 делфу, судя по используемым типам. Проблему-то решили? Тоже интересует вопрос по сабжу
TurboPower Abbrevia Для тех, кто как и я ищет решение для распаковки всяких gzip программой на Delphi - очень рекомендую обратить внимание на бесплатную библиотеку TurboPower Abbrevia (http://sourceforge.net/projects/tpabbrevia/) - на чистом паскале в виде удобных классов реализованы многие алгоритмы разархивирования, архивирования прочих операций с архивами. В том числе gzip.