Как я могу ускорить клонирование массива в C #?

Я работаю над своим решением проблемы Культ связанной переменной .

Часть проблемы заключается в том, чтобы вы реализовали интерпретатор для «Древняя» Универсальная Машина. Я реализовал интерпретатор для машины, которую они описывают, и теперь я запускаю программу тестирования, предоставленную университетом для ее тестирования.

Моя реализация этого интерпретатора на C # медленная !

Я запустил свою программу в профилировщике ANTS, чтобы увидеть, где происходит замедление, и я вижу, что более 96% моего времени занимает операция «Загрузить программу».

ANTS Profile Results

Спецификация этого оператора выглядит следующим образом:

 #12. Load Program.

              The array identified by the B register is duplicated
              and the duplicate shall replace the '0' array,
              regardless of size. The execution finger is placed
              to indicate the platter of this array that is
              described by the offset given in C, where the value
              0 denotes the first platter, 1 the second, et
              cetera.

              The '0' array shall be the most sublime choice for
              loading, and shall be handled with the utmost
              velocity.

Вот мой код для этого оператора:

case 12: // Load Program
    _platters[0] = (UInt32[])_platters[(int)_registers[B]].Clone();
    _finger = _registers[C];
    break;

Исходный код всего моего интерпретатора «Универсальной машины» находится здесь .

Что я могу сделать, чтобы это ускорить? Существуют и другие реализации этого интерпретатора, написанные на C, которые значительно быстрее выполняют весь тест.

10
задан mmcdole 20 June 2011 в 22:48
поделиться