Я написал компилятор, который генерирует IL, используя System.Reflection.Emit. Это отлично работает для кода, но я не знаю, как испускать большие инициализированные таблицы, которые мне также необходимо включить. Вся суть компилятора заключается в том, чтобы сгенерировать эти таблицы, и невозможно вычислить инициализаторы во время выполнения.Инициализация большого количества данных в IL
Я попытался сохранить данные инициализации в строках, загружаемых с использованием Ldstr, но оказалось, что существует жесткий предел времени, в течение которого могут быть получены эти строки.
Я также попытался испустить код, который выделяет массив, затем назначает инициализаторы (a [0] = const0; a [1] = const1; a [2] = const2, ...). Это работает, но, похоже, замедляет выполнение, даже если оно выполняется только один раз при инициализации. Я предполагаю, что компилятор JIT не очень похож на много линейного кода.
Я предполагаю, что я мог бы попробовать включить инициализаторы в качестве файла ресурсов, хотя я думаю, что синтаксический анализ не будет таким быстрым. В идеале я хотел бы использовать некоторый метод, который позволяет мне хранить все в одной dll.
Что такое «обычный» способ инициализации большого количества данных в .net, пожалуйста?
Что такое «большой»? И какие типы задействованы? – rene
Посмотрите, как это делает компилятор C#. Есть трюк. – usr
Большой - 10 МБ. Но в идеале я хотел бы что-то, что еще больше. –