YraganTron: откройте страницу в браузере, и скопируйте код HTML от туда. Просто следы шаблонизатора, вероятней всего, не дают нормально отработать скрипту. На что не наводил, подсказка не появилась.
Исходные данные каждый раз разные. Найти в нем какую-то закономерность невозможно.
Из всего этого могу только указать на то, что сам паттерн не меняется, и содержит 5 идущих подряд 0. То бишь: x x x 0 0 0 0 0 x x
Можно это как то использовать?
Александр: я не гуру алгоритмов, но такие предположения тоже имеется. Точно известно, что паттерн есть в самом начале. Его точно нельзя как-то ускорить, если не брать в счет асинхронные операции?
ayazer: верно. Для маленьких файлов распила на куски не. Для больших идет распил файла по 70мб и каждая часть компрессится отдельно. Сейчас понял в чем причина. 31 139 8 находятся в начале каждой части. Потом-то я эти части "клею" в один файл, в котором и получается 31 139 8 ...... 31 139 8 ...... 31 139 8. А исходные файлы, что при компресси, что при декомпересии читаются кусками фиксированного размера. Следовательно, первый кусок может и корректно декомпрессуется, но вот остальное корявые. Придется перед декомпрессией искать в файле эти байты и по ним делить на куски.
ayazer: поменял реализацию для compress, петерь сразу пишет в файл. С Decompress такое не прокатит. Пришлось передать в GZipStream new MemoryStream. Все сработало. Но появилась новая невиданна зверушка: Decompress.CopyTo(outFile) выдает - Неправильное магическое число в заголовке GZip. Передача должна идти в поток GZip. К примеру для fb2 файла размером 840кб компрессия до 300кб. Обратно все работает. Для файла pdf размером 96мб компрессия не работает, как вы и отмечали - он уже сжат, при декомпрессии выдает это исключение.
ayazer: сейчас посмотрю почему я не пишу в файл. Накидайте пожалуйста литературы, которую вы читали, что бы все это знать и понимать. Что-нибудь на уровне Троелсена.
ayazer: еще фигня в том, что GZipStream работает, извините за выражение, через жопу. Или я так работаю.. Для сжатия ему нужен один поток, для распаковки другой.. CanRead, CanSeek всегда false. Но я не могу отойти от него. Это обязательное требование.
ayazer: логика уже есть. у меня несколько потоков в зависимости от размера файла, доступной памяти и кол-ва потоков процессора. Читает файл по частям, ра/сжимает данные, сохраняет в папку Temp. Но я сейчас хочу попросить у вас помощи. Дело в том, что я, в целях сохранения ОЗУ пытаюсь в GZipStream передать MemoryStream в котором хранится буфер, а потом в этот же MemoryStream записать обработанные GZip`ом данные.
Выглядит это примерно так:
using(MemoryStream memory = new MemoryStream)
{
memory.write(buffer, 0, buffer.lenght);
using(GZipStream gzip = new GZipStream(memory, Fastest))
{
gzip.CopyTo(memory); // если так exception gzip неподдерживает чтение
memory.CopyTo(gzip); // а так memory содержит нулевые байты, к том количестве, в котором были изначально
}
}