Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сериализация больших объектов

10K
01 февраля 2011 года
Cybernetic
106 / / 22.07.2009
Нужно сериализовать древовидную структуру больших размеров (в каждой вершине по два объекта SortedList, от одного из которого идет следующая вершина).

 
Код:
private class Node
    {
      public SortedList<uint, Node> NodeList;
      public SortedList<uint, int> IndexCount;
    }


Дерево не высокое, но широкое. Гига 4 оперативы может жрать. И все это нужно скинуть на жесткий диск.

Получаю следующий exception:
The internal array cannot expand to greater than Int32.MaxValue elements.

Я правильно понимаю, что мой объект слишком большой? Можно ли обойти эту ошибку без расписывания дерева в линейную структуру с индексами?
33K
01 февраля 2011 года
hivewarrior
205 / / 16.11.2010
Можно. Купи себе 64битный процессор и поставь 64 битную ось.

Ошибка в том, что слишком много элементов в массиве, работать тебе придется не как с массивом, а действовать через указатели, но оставаясь в рамках дерева.
10K
01 февраля 2011 года
Cybernetic
106 / / 22.07.2009
Цитата: hivewarrior
Можно. Купи себе 64битный процессор и поставь 64 битную ось.



Тестировал я на 64 битах, а вот разработка ведется при параметре платформы "ANY CPU". В студии тоже надо исправить этот параметр?

Цитата: hivewarrior
Ошибка в том, что слишком много элементов в массиве, работать тебе придется не как с массивом, а действовать через указатели, но оставаясь в рамках дерева.



Здесь я не понял, извиняйте)) Можно тоже самое другими словами?

33K
01 февраля 2011 года
hivewarrior
205 / / 16.11.2010
Цитата: Cybernetic
Тестировал я на 64 битах, а вот разработка ведется при параметре платформы "ANY CPU". В студии тоже надо исправить этот параметр?



В студии я не знаю где и что менять ибо не люблю поделки от микрософта и программирую не на их платформах. Наверно где-то директиву на х64 надо поставить или что-то подобное.

Цитата: Cybernetic

Здесь я не понял, извиняйте)) Можно тоже самое другими словами?



Ты создаешь массивом, в котором тысяча записей, хотя максиму полтысячи. Поэтому и ругается.

Как уйти от этой проблемы? Можно организовать свой "массив" с блекджеком и указателями на следующий/предыдущий элемент. Что-то на подобии списков.

5
01 февраля 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Cybernetic

Получаю следующий exception:
The internal array cannot expand to greater than Int32.MaxValue elements.

Слишком много объектов в дереве (имеется в виду вообще объектов, а не узлов). По видимому какая-то внутренняя структура данных (Hashtable) двоичного сериализатора попыталась выделить слишком большой массив бакетов.

Такого рода объекты нужно сериализовывать вручную - работать будет быстрее, занимать места будет меньше.

5
01 февраля 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: hivewarrior
В студии я не знаю где и что менять ибо не люблю поделки от микрософта и программирую не на их платформах.

Товарищ, никто не интересовался тут твоим мнением. Не программируешь на дотнете - милости просим в другие форумы.

Цитата: hivewarrior
Как уйти от этой проблемы? Можно организовать свой "массив" с блекджеком и указателями на следующий/предыдущий элемент. Что-то на подобии списков.

Если не знаешь способы решения задачи, то хотя бы не стоит писать бредовые сообщения, не так ли?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог