Многопоточное сжатие в C#

В прошлом я создал свою XML-схему, затем использовал инструмент для генерации классов C#, которые сериализируют к той схеме. Инструмент определения схемы XML является одним примером

http://msdn.microsoft.com/en-us/library/x6c1kb0s (По сравнению с 71) .aspx

7
задан Gareth 31 July 2009 в 07:59
поделиться

4 ответа

Я думаю, что лучше всего самостоятельно разделить поток данных с равными интервалами и запустить потоки для параллельного сжатия каждой части отдельно, если используются непараллельные алгоритмы. (После этого один поток объединяет их в один поток (вы можете создать класс потока, который продолжит чтение из следующего потока, когда текущий поток закончится)).

Вы можете взглянуть на SharpZipLib , что несколько лучше, чем потоки внутреннего сжатия в .NET.

РЕДАКТИРОВАТЬ: Вам, конечно, понадобится заголовок, чтобы указать, где начинается каждый новый поток. :

7
ответ дан 6 December 2019 в 14:07
поделиться

Нашел эту библиотеку: http://www.codeplex.com/sevenzipsharp

Похоже он является оболочкой для неуправляемого файла 7z.dll, который поддерживает многопоточность. Очевидно, не идеально, если нужно оборачивать неуправляемый код, но похоже, что в настоящее время это единственный доступный вариант.

4
ответ дан 6 December 2019 в 14:07
поделиться

Обычно я бы сказал попробовать Intel Parallel studio, которая позволяет вам разрабатывать код, специально предназначенный для многоядерных систем, но на данный момент он работает только на C / C ++. Может быть, создать просто библиотеку на C / C ++ и вызвать ее из своего кода на C #?

-1
ответ дан 6 December 2019 в 14:07
поделиться

Формат сжатия (но не обязательно алгоритм) должен учитывать тот факт, что вы можете использовать несколько потоков. Или, скорее, не обязательно, что вы используете несколько потоков, но что вы сжимаете исходные данные в несколько этапов, параллельно или иным образом.

Позвольте мне объяснить.

Большинство алгоритмов сжатия сжимают данные последовательно. Любые данные можно сжать, используя информацию, полученную из уже сжатых данных. Так, например, если вы сжимаете книгу плохого автора, в которой несколько раз используются одни и те же слова, клише и предложения, к тому времени, когда алгоритм сжатия дойдет до второго + появления этих вещей, обычно это будет может сжать текущее вхождение лучше, чем первое.

Однако побочным эффектом этого является то, что вы можете ' На самом деле объединить два сжатых файла без распаковки обоих и их повторного сжатия как одного потока. Информация из одного файла не будет соответствовать другому файлу.

Решение, конечно же, состоит в том, чтобы сказать подпрограмме декомпрессии, что «Эй, я только что переключился на совершенно новый поток данных, пожалуйста, начните заново накапливать знания о данных».

Если формат сжатия поддерживает такой код, вы можете легко сжать несколько частей одновременно.

Например, файл размером 1 ГБ можно разделить на 4 файла по 256 МБ, сжимать каждую часть на отдельном ядре, а затем соедините их вместе в конце.

Если вы создаете свой собственный формат сжатия, вы, конечно, можете создать для него поддержку самостоятельно.

Может ли .ZIP или .RAR или любой из известных форматов сжатия поддерживать это мне неизвестно, но я знаю.

1
ответ дан 6 December 2019 в 14:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: