64-разрядное Выделение VB.NET> 2 ГБ RAM (ошибка.NET?)

Я не полагаю, что SQL Server имеет встроенную функцию разделения, таким образом, кроме UDF, единственный другой ответ, который я знаю, должен угнать функцию PARSENAME:

SELECT PARSENAME(REPLACE('Hello John Smith', ' ', '.'), 2) 

PARSENAME берет строку и разделяет ее на символе точки. Это берет число в качестве своего второго аргумента, и то число определяет который сегмент строки возвратиться (работающий из наоборот).

SELECT PARSENAME(REPLACE('Hello John Smith', ' ', '.'), 3)  --return Hello

Очевидная проблема состоит в том, когда строка уже содержит период. Я все еще думаю с помощью UDF, лучший способ... какие-либо другие предложения?

5
задан user79755 31 July 2009 в 19:57
поделиться

4 ответа

По-видимому, невозможно выделить более 2 ГБ даже в 64-битном приложении .net, работающем в 64-битной ОС.

Я нахожу это очень разочаровывающим и совершенно не учитывая то, что 64-битные приложения и ОС созданы для. Я имею дело с гигантскими изображениями и хотел бы иметь возможность одновременно работать с необработанными байтами в ОЗУ. Теперь мне нужно реализовать алгоритмы разбиения на страницы, чтобы ограничить фрагменты 2 ГБ.

Привет, Microsoft, как насчет того, чтобы исправить это в следующем выпуске .NET? Да, я сказал исправление. Это потому, что он сломан. Как вы ожидаете, что 64-битные приложения начнут расти, когда вы делаете глупые вещи вроде этого? (Можете ли вы сказать, что я раздражен .) Спасибо за внимание.

Ссылка

http://blogs.msdn.com/joshwil/archive/2005/08/10/450202. aspx

2
ответ дан 15 December 2019 в 01:08
поделиться

Я думаю, что UnmanagedMemoryStream делает то, что вам нужно. Документ MSDN для UnmanagedMemoryStream

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

2
ответ дан 15 December 2019 в 01:08
поделиться

Следующие действия [теоретически] (синтаксис C #):

Array.CreateInstance(typeof(int[]), 0L);

Изменить: создать тип с выделенным фиксированным размером массив массивов 1ГБ. Вы можете повторно проиндексировать свойство Item с помощью сдвига.

0
ответ дан 15 December 2019 в 01:08
поделиться

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

0
ответ дан 15 December 2019 в 01:08
поделиться