C# parchive / quickpar / par2 восстанавливают реализацию?

Как указано выше, такого точного определения не существует. Однако я использую этот простой обходной путь, чтобы заставить дочерний класс определить «абстрактное» свойство:

abstract class Father 
{
  public $name;
  abstract protected function setName(); // now every child class must declare this 
                                      // function and thus declare the property

  public function __construct() 
  {
    $this->setName();
  }
}

class Son extends Father
{
  protected function setName()
  {
    $this->name = "son";
  }

  function __construct(){
    parent::__construct();
  }
}
9
задан Led 19 May 2009 в 08:19
поделиться

3 ответа

Вы хотите использовать сами PAR? У меня есть полностью встроенная имплементация Рида / Соломона, которую я бы опубликовал, если она поможет (совпадение, на котором основаны PAR), но у меня нет ничего для всей обработки файлов и их разбиения.

Мой код является реализацией Stream и создает строку со всеми данными для исправления ошибок. Затем вы можете испортить эти данные и отправить их обратно, и система автоматически восстановит их. Я бы просто опубликовал его, но он длинный , и я слишком ленив, чтобы сделать сообщение в блоге и дать ссылку на него.

Чтобы это работало как PAR, вам придется разбить его на файлы, затем создайте систему, которая может идентифицировать отсутствующие тома и «добавлять» поврежденные данные для всех отсутствующих данных (математика не может обрабатывать отсутствующие данные, только поврежденные).

Кроме того, в качестве примечания к производительности, система, для которой она была построена, была довольно «взрывной», она принимала множество потоков по 100 тыс. одновременно, но также имела долгие ожидания бездействия. Версия математики на C # работала примерно на 6% быстрее, чем версия на чистом C. Если бы я проводил тестирование производительности, используя только безостановочную нагрузку, C # работал бы примерно на 1-2% медленнее. По моему опыту, большинство математических преобразований C в C # дают одинаковые результаты.

1
ответ дан 5 December 2019 в 02:28
поделиться

Это не прямой ответ, но я думаю, что есть способ загрузить 32-битную dll в 64-битное приложение:

http://dnjonline.com/article.aspx?ID= jun07_access3264

Из статьи:

Это решение требует дополнительной работы, поскольку должен быть создан 32-битный суррогатный процесс, который загружает 32-битную DLL и предоставляет ее API. Кроме того, некоторые изменения потребуются на 64-битной стороне, поскольку потребитель должен использовать один из методов IPC вместо прямого доступа к 32-битной DLL. Стоит отметить, что в крайних случаях эта дополнительная работа может быть сопоставима с работой, связанной с разработкой 64-разрядной версии 32-разрядной библиотеки DLL с нуля.

Одним из возможных способов сокращения этих затрат является реализация 64-битная DLL-оболочка, которая предоставляет те же функции, параметры, типы и т. Д., Что и исходная 32-битная DLL. Затем эта DLL-оболочка может выполнять IPC-вызовы исходной 32-разрядной библиотеки DLL, которая была загружена в суррогатный процесс.

0
ответ дан 5 December 2019 в 02:28
поделиться

Некоторое время назад я делал что-то подобное. Если вы посмотрите на исходный код par2, это нетривиально. Вероятно, вы могли бы без особых проблем перенести его на C #. К сожалению, все усилия, которые потребуются, дорого обойдутся вам в производительности (попробуйте, если вы мне не верите).

В итоге я вызвал исполняемый файл par2 через CreateProcess. Вы можете получить дескрипторы для stdin, stdout и strerr. Поскольку исполняемый файл является консольным приложением, вы можете проанализировать вывод, чтобы узнать о ходе выполнения. Если вы хотите «отменить» операцию, вы всегда можете убить процесс.

Это небрежный метод.

«Правильный» способ - взять исходный код par2 и перенести его на 64-битную dll (stick с неуправляемой библиотекой C / C ++ из соображений производительности).

0
ответ дан 5 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

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