У меня есть небольшая библиотека C# со статическим классом, которая содержит очень большой, но простой четырехмерный массив байтов, представляющий многомерную таблицу решений (всего около 90 Кбайт)."System.TypeLoadException: Внутреннее ограничение: слишком много полей." С большой структурой статических данных
Там есть еще одна структура данных, словарь, который помогает индексировать в первом измерении таблицы решений.
Эта таблица решений является статическим частным элементом данных, инициализированным статическими инициализаторами массива. Код создается в Visual Studio 2010 с помощью T4, из документов Excel.
Решения получены с помощью статического метода, который индексируется в многомерный массив.
Когда я запускаю простое тестовое приложение, используя эту библиотеку, он бомбит «System.TypeLoadException: Внутреннее ограничение: слишком много полей». Исключение при первом вызове метода статического решения.
Тема на Stackoverflow упоминает библиотеки со «слишком большим количеством символов». Возможно, я ошибаюсь, но в моей библиотеке действительно очень мало символов.
Что здесь происходит?
Код сниппета:
private static byte[][][][] decisions = new byte[][][][] {
new byte[][][] {
new byte[][] {
new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6}
},
new byte[][] {
new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},
new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6},new byte[]{5,6,6}
},
... и так далее ...
Я думаю, что кодирование данных в файл является лучшим вариантом. Если вы действительно хотите запретить пользователю изменять данные, вы можете вставить этот файл в качестве ресурса. –
Я люблю Stackoverflow !!Мои цели - быстрый поиск и неясность (данные решения должны быть сложны для обратного проектирования). Файл ресурсов, вероятно, как сериализованный объект –
(продолжение) - это один из способов. Учитывая время, которое я потратил на эту проблему, я пошел с моим первоначальным подходом к генерации кода с упрощенным массивом (см. Мой ответ ниже). –