Я работаю над Монте-Кэролом, и мне нужно повысить эффективность двигателя.
- Путь MonteCarlo создается сторонней библиотекой (на c ++)
- Ценообразование выполняется в IronPython (сценарий, созданный конечным пользователем)
- Все остальное управляется приложением c #
Процесс ценообразования следующий:
- Приложение C # запрашивает путь и собирает их
- Приложение C # проталкивает пути к скрипту, который оценивает и возвращает значения
- Приложение C # отображает результат для конечного пользователя
Количество и размер собранных путей известны заранее.
У меня есть 2 решения с некоторыми преимуществами и недостатком:
- Запросить генерацию пути для каждого пути, попросить скрипт вернуть результат и, наконец, агрегировать результаты после обработки всех путей
- Запросить генерацию пути, собрать их все, попросить скрипт обработать их все сразу и вернуть мне окончательную цену
Первые решения отлично работают во всех сценариях, но по мере того, как количество запрошенных путей увеличивает производительность, я думаю, что это связано с многократным вызовом ironpython.
Второе решение более быстрое, но может вызвать исключение «недостаточно памяти» (я думаю, что недостаточно адресации виртуальной памяти), если число запрошенных путей слишком велико
Я выбираю золотую середину и обрабатываю кучу путей, затем агрегирую цены.
Теперь я хочу повысить производительность, зная заранее, сколько путей я могу обработать, не выходя за исключение «нехватка памяти»
Я сделал математику, и я заранее знаю размер (в памяти) пути для данного запроса. Однако, поскольку я уверен, что это не проблема с памятью, а проблема с адресацией виртуальной памяти
Итак, весь этот текст резюмируется следующими 2 вопросами:
- Можно ли заранее узнать, сколько виртуальной памяти адресует моя
процессу нужно будет сохранить экземпляр класса (размер в памяти и структура известны)?
- Можно ли узнать, сколько адресов виртуальной памяти все еще доступно для моего процесса
Кстати, я работаю на 32-битном компьютере
Заранее спасибо за помощь