Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Большие массивы 
:(
    Опции темы
Rosomaha
Дата 13.5.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.8.2006

Репутация: нет
Всего: нет



Нужно выделить память под большой массив:
Код
float[,] _weight;
int NnInLayer = 2250000;
_weight = new float[NnInLayer, NnInLayer + 1];


возникает OutOfMemoryException
возможно ли вообще выделить память под массив такой размерности?
PM MAIL   Вверх
NightmareZ
Дата 13.5.2009, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 2
Всего: 13



Не нужно так делать.


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
Rififi
Дата 13.5.2009, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



Rosomaha, 
возможно ли вообще выделить память под массив такой размерности? 
возможно.
для этого нужно иметь 64-битную OS, и компьютер с 32 терабайтами памяти.
PM MAIL   Вверх
Ctrl
Дата 14.5.2009, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 12.2.2008
Где: Tula

Репутация: 6
Всего: 7



Цитата

возможно ли вообще выделить память под массив такой размерности?

Другой вопрос - а нужно ли?

В реальных задачах скорее всего такой массив в большей своей части будет пустой (например электронная таблица 100000X1000).
Воспользуйся разреженным массивом (SparseArray).
Вот очень простая его реализация (через hash):


Код

using System;
using System.Collections.Generic;

namespace SimpleSparceArrayTest {
    class Program {
        static void Main(string[] args) {
            SparseArray<int> sArray = new SparseArray<int>();
            sArray[2500, 550] = 5;
            sArray[550, 2500] = 10;
            int a = sArray[0, 999999];
            int l = sArray.Length;
        }
    }
    public class SparseArray<T> {
        Dictionary<Key, T> contentHash;
        public SparseArray() {
            contentHash = new Dictionary<Key, T>();
        }
        public int Length {
            get { return contentHash.Count; }
        }
        // TODO: ICollection<T> etc.
        public T this[int i, int j] {
            get {
                T value;
                if(!contentHash.TryGetValue(new Key(i, j), out value)) {
                    value = default(T);
                }
                return value;
            }
            set { contentHash[new Key(i, j)] = value; }
        }
        #region Key
        class Key {
            readonly int I, J, _hash;
            public Key(int i, int j) {
                I = i; J = j;
                _hash = I.GetHashCode() ^ J.GetHashCode();
            }
            public override bool Equals(object obj) {
                Key key = obj as Key;
                return (key != null) && (I == key.I) && (J == key.J);
            }
            public override int GetHashCode() { return _hash; }
        }
        #endregion Key
    }
}


PM MAIL ICQ   Вверх
-Mikle-
Дата 15.5.2009, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



2'250'000 * 2'250'001 * 4 = 20'250'009'000'000 байт = 20.25 Терабайт... не слабо...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0638 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.