2014-09-05 5 views
-2

У меня есть требование, когда мне нужно скопировать данные из таблицы данных в многомерный массив, но когда я объявляю многомерный массив, я получаю ошибку памяти. пожалуйста, предложите решение.Получение «System.OutOfMemoryException» при объявлении многомерного массива

Dim my_array(number, number, number, number, number, number, number, number, number, number, number) As String 

где число количество строк, поступающих из базы данных SELECT COUNT(COL.NAME) FROM TABLE_NAME то есть.

, если я использую:

Dim my_array(number, number, number, number, number, number, number, number, number) As String 

нет никакой ошибки.

+0

Вы, вероятно, следует использовать 'Datatable 'вместо многомерного массива. Что касается вашей проблемы: отдельные объекты в .NET <4.5 ограничены размером 2 ГБ. Кажется, у вас много данных для обработки, поэтому он может превысить этот предел. Будьте более конкретными: каковы ваши данные, чего вы пытаетесь достичь? Если вы можете использовать .NET 4.5, обратитесь к этой статье: http://msdn.microsoft.com/en-us/library/hh285054%28v=vs.110%29.aspx – Jens

+2

Простая математика объяснит эту проблему. Если вы ошиблись в предположении, что каждый элемент массива будет потреблять только 1 байт памяти (он не будет), и у вас будет только 10 строк в таблице, объем памяти, необходимый для работы my_array, составляет 10^9 байтов = 1 ГБ памяти , Для того, кто не работает, вам понадобится 10^12 байтов = 1000 ГБ –

+0

@JonathanHouston Я не получаю вашу математику. Если у него 11 массивов с 10 строками, вы получите '11 * 10 = 110 элементов * 1 байт = 110 байтов' (не то, что ваша общая идея слишком большого количества данных в одном массиве не правдоподобна). – Jens

ответ

0

Похоже, вы пропустили this section при чтении документов. Если я правильно вас понимаю, вы пытаетесь создать массив x,y. Вместо использования зубчатых массивов я предлагаю вам использовать многомерный массив.

Вот пример, где я создаю 10 строк и 3 столбцов:

Dim tableArray As String(,) = New String(10, 3) {} 

For rowIndex As Integer = 0 To 9 '0,1,2,3,4,5,6,7,8,9 = 10 rows 
    For columnIndex As Integer = 0 To 2 '0,1,2 = 3 columns 
     tableArray(rowIndex, columnIndex) = String.Format("Row={0}, Column={1}", rowIndex, columnIndex) 
    Next 
Next 

Тем не менее, лучше всего было бы просто copy таблица данных.

Dim table2 As DataTable = table1.Copy() 

Если вам нужно фильтровать таблицу затем использовать по умолчанию data view таблицы:

table1.DefaultView.RowFilter = "Name LIKE '*Smith*'" 
Dim table2 As DataTable = table1.DefaultView.ToTable() 

Или создать новый вид данных:

Dim view As New DataView(table1) 
view.RowFilter = "Name LIKE '*Smith*'" 
Dim table2 As DataTable = view.ToTable() 
Смежные вопросы