Статический массив внутри класса, вызывающий проблемы с памятью? Какие еще варианты есть? - PullRequest
1 голос
/ 13 сентября 2010

Доброе утро, ТАК,

У меня есть класс, который содержит следующий статический массив:

public static ResultObject[] ResultArray = new ResultObject[500];

В моей программе есть 12 миллионов экземпляров этого класса, которые все добавляют в этот массив. Я получаю OutOfMemoryException и думаю, что это может быть причиной этого.

Можно ли как-то лучше управлять памятью, используемой этим массивом, чтобы я не получил это исключение? Если нет, что быстрее, запись в файл или базу данных?

Я бы предпочел хранить эти данные в памяти, но если это является причиной моей проблемы, мне придется попробовать что-то еще.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 сентября 2010

Если ResultObject является статическим, то у вас должен иметь только один его экземпляр, даже если у вас есть миллионы экземпляров класса. Как и предполагали другие, дважды проверьте, что проблема с памятью не вызвана чем-то другим в вашем классе.

Если вы уверены, что проблема с памятью связана с ResultObject, внимательно проверьте, что вы делаете с этим классом. Например, вы делаете что-нибудь, что может привести к созданию копии ResultObject для каждого из этих 12 миллионов экземпляров?

0 голосов
/ 13 сентября 2010

Это не может быть прямым ответом на ваш вопрос, но не думаете ли вы, что возможно, что 12 миллионов экземпляров класса, содержащего статический массив, а не сам массив, могут вызывать эту проблему с памятью?

Первое, что я хотел бы сделать, прежде чем пытаться оптимизировать, - это абсолютно точно установить причину проблем.

Используйте профилировщик памяти и выясните причину проблемы с памятью, прежде чем выяснить, как именно ее оптимизировать. Временами вы будете удивлены, когда проведете расследование и обнаружите, что истинная причина не всегда может быть такой, как вы ожидаете.

Вы можете использовать CLR profiler или пробную версию коммерческого профилировщика, например ANTS (по крайней мере, для начала).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...