Разработка и отладка мадам-hogging приложения C#

Вам нужно будет использовать подготовленное утверждение, чтобы использовать переменные таким образом. Попробуйте это:

SET @sql = CONCAT('CREATE TABLE `saver`.`test_SymbolChart` ( 
    `symbolChartId` BINARY(16) NOT NULL, 
    `symbolId` BINARY(16) NOT NULL, 
    `date` TIMESTAMP NOT NULL, 
    `open` DECIMAL(', @priceM, ',', @moneyD, ') NULL,
    `high` DECIMAL(', @priceM, ',', @moneyD, ') NULL,
    `low` DECIMAL(', @priceM, ',', @moneyD, ') NULL,
    `close` DECIMAL(', @priceM, ',', @moneyD, ') NULL,
    `volume` INT NULL,
    `dateCreated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`symbolChartId`),
    INDEX `symbolIdIndex` (`symbolId` ASC)
)');
PREPARE stmt FROM @sql;
EXECUTE stmt;

Демо на dbfiddle

12
задан George Stocker 29 April 2009 в 19:50
поделиться

6 ответов

From Microsoft:

The virtual address space of processes and applications is still limited to 2 GB unless the /3GB switch is used in the Boot.ini file. When the physical RAM in the system exceeds 16 GB and используется ключ / 3GB, рабочий система будет игнорировать дополнительную оперативную память пока не будет удален ключ / 3GB. это из-за увеличенного размера ядро требуется для поддержки большего Записи таблицы страниц. Предположение сделал что бы администратор скорее не потеряйте функциональность / 3GB тихо и автоматически; следовательно, это требует от администратора явно измените этот параметр. Переключатель / 3GB выделяет 3 ГБ виртуальное адресное пространство для приложение, которое использует IMAGE_FILE_LARGE_ADDRESS_AWARE в заголовок процесса. Этот переключатель позволяет заявки на адрес 1 ГБ дополнительное виртуальное адресное пространство выше 2 ГБ.

2
ответ дан 2 December 2019 в 20:41
поделиться

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

Если на ваших машинах x64 нет 2.0SP1 ( или позже), стоит попробовать ...

2
ответ дан 2 December 2019 в 20:41
поделиться

Можете ли вы опубликовать там, где подразумевается, что вы видите все 4 ГБ? Ох, может быть, здесь: Интересная информация по этой ссылке

Различия в адресуемой памяти

Первое, что замечает большинство разработчиков является то, что 64-битные процессоры обеспечивают огромный скачок в объеме физического и виртуальная память, которая может быть

 * 32-разрядные приложения на 32-разрядных платформах могут адресовать до 2 ГБ
* 32-разрядные приложения, созданные с помощью флага компоновщика / LARGEADDRESSAWARE: YES

в 32-битной Windows XP или Windows Server 2003 со специальной загрузочной опцией / 3gb can address up to 3 GB. This constrains the kernel to only 1 GB which may cause some drivers and/or services to fail.

* 32-bit applications built with the /LARGEADDRESSAWARE:YES linker flag

on 32-bit versions of Windows Vista, and on 32-bit versions of Windows Server Code Name "Longhorn" operating systems, can address memory up to the number specified by the boot configuration data (BCD) element IncreaseUserVa. IncreaseUserVa can have a value ranging from 2048, the default, to 3072 (which matches the amount of memory configured by the /3gb boot option on Windows XP). The remainder of 4 GB is allocated to the kernel and can result in failing driver and service configurations.

For more information about BCD, see Boot Configuration Data on MSDN.

* 32-bit applications on 64-bit platforms can address up to 2 GB, or up

до 4 ГБ с флагом компоновщика / LARGEADDRESSAWARE: YES. * 64-битные приложения используют 43 бит для адресации, что обеспечивает 8 ТБ виртуальный адрес для приложений и 8 ТБ зарезервирован для ядра.

Так что да, похоже, вы должны (на цели XP64) увидеть 4 ГБ.

1
ответ дан 2 December 2019 в 20:41
поделиться

Спасибо всем, кто откликнулся; этот сайт действительно потрясающий!

Кажется, что в WOW64 мы действительно добираемся до 4-Гб пользовательского пространства, но мне кажется (слегка образованное предположение), что накладные расходы сборщика мусора (или, возможно, запас прочности) становятся значительными по мере роста памяти, выделяемой управляемым кодом. Запустив мое тестовое приложение на WOW64 (командная строка с LARGEADDRESSAWARE), я получаю общий объем ресурсов 3175 МБ; работая на машине с WIN32 XP с набором параметров 4GT, я получаю общее выделение 2857 МБ: поэтому полный гигабайт дополнительной памяти в пользовательском режиме дает увеличение только на ~ 318 МБ на уровне приложения C #!

(я изменил свой тестовая программа, делающая пополам размер блока выделения при неудачном выделении, а также добавил вызовы, чтобы стратегически форсировать сборку мусора, чтобы немного выйти за пределы того, что «обычное» приложение могло бы захватить - напишите здесь, если вы хотите, чтобы я опубликовал исправленный код.)

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

3
ответ дан 2 December 2019 в 20:41
поделиться

Может кто-нибудь сказать мне, как заставить отладчик Visual Studio (VS 2008, также известный как VS90) подчиняться биту / largeaddressaware и прекратить ограничивать память приложения до 2 ГБ?

Для этого требуется два шага - оба в свойствах проекта:

  • на вкладке событий сборки, настроить шаг после сборки для запуска editbin / largeaware $ (TargetPath)
  • на вкладке отладки, снимите флажок Включить хостинг Visual Studio process

Этими двумя шагами ваша примерная программа работала до 3045 МБ

5
ответ дан 2 December 2019 в 20:41
поделиться

I built your simple sample app from the post, crashed it and attached WinDbg to it.

!address -summary will show you the effective user mode address space for the process.

0:003> !address -summary
 TEB fffdd000 in range fffdb000 fffde000
 TEB fffda000 in range fffd8000 fffdb000
 TEB fffd7000 in range fffd5000 fffd8000
 TEB fffaf000 in range fffad000 fffb0000
 ProcessParametrs 004c2b40 in range 004c0000 00535000
 Environment 004c1978 in range 004c0000 00535000

-------------------- Usage SUMMARY --------------------------
    TotSize (      KB)   Pct(Tots) Pct(Busy)   Usage
   e7d2e000 ( 3798200) : 90.56%    98.77%    : RegionUsageIsVAD
   1547b000 (  348652) : 08.31%    00.00%    : RegionUsageFree
    2887000 (   41500) : 00.99%    01.08%    : RegionUsageImage
     3ff000 (    4092) : 00.10%    00.11%    : RegionUsageStack
          0 (       0) : 00.00%    00.00%    : RegionUsageTeb
     1c0000 (    1792) : 00.04%    00.05%    : RegionUsageHeap
          0 (       0) : 00.00%    00.00%    : RegionUsagePageHeap
       1000 (       4) : 00.00%    00.00%    : RegionUsagePeb
          0 (       0) : 00.00%    00.00%    : RegionUsageProcessParametrs
          0 (       0) : 00.00%    00.00%    : RegionUsageEnvironmentBlock
       **Tot: ffff0000 (4194240 KB)** Busy: eab75000 (3845588 KB)

-------------------- Type SUMMARY --------------------------
    TotSize (      KB)   Pct(Tots)  Usage
   1547b000 (  348652) : 08.31%   : <free>
    2aa3000 (   43660) : 01.04%   : MEM_IMAGE
    1f6a000 (   32168) : 00.77%   : MEM_MAPPED
   e6168000 ( 3769760) : 89.88%   : MEM_PRIVATE

-------------------- State SUMMARY --------------------------
    TotSize (      KB)   Pct(Tots)  Usage
   db838000 ( 3596512) : 85.75%   : MEM_COMMIT
   1547b000 (  348652) : 08.31%   : MEM_FREE
    f33d000 (  249076) : 05.94%   : MEM_RESERVE

Largest free region: Base fbfc0000 - Size 03fed000 (65460 KB)

Based on Tot: ffff0000 (4194240 KB) we do have 4GB of effective user mode space.

Also our largest free block is 65,460KB which does imply that we should be able to allocate more memory.

2
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: