Можете ли вы определить "большой"? Пример 1000x10000xint (другой пост) выходит на 40Mb; и 1000x10000x4 байта (= int) составляет 38 МБ. Что касается накладных расходов, это не страшно.
Какими данными T, вероятно, будет? Просто приматы?
Я думаю, что я мог бы, вероятно, отредактировать protobuf-net для поддержки прямоугольных массивов *
- но для сохранения некоторой совместимости проводов нам, вероятно, потребуется заголовок (один байт) на элемент - т.е. 9 МБ служебных данных для примера 1000x10000.
Это, вероятно, не стоит для таких вещей, как float
, double
и т. Д. (Поскольку они хранятся дословно в «буферах протокола») - но для таких вещей, как int
, может быть экономия просто из-за того, как он упаковывает целые числа ... (особенно если они имеют тенденцию быть на меньшей стороне [величина]). Наконец, если T на самом деле объекты типа Person
и т. Д., То он должен быть lot лучше, чем двоичная сериализация, поскольку он очень хорош в упаковке объектов.
Это не было бы тривиально, чтобы рожок для обуви в прямоугольных массивах, но дайте мне знать, если это то, что вы хотели бы попробовать.
*
: на данный момент этого не происходит, поскольку спецификация «протокольные буферы» их не поддерживает, но мы можем взломать это ...