сбой JavaScript после нескольких запусков - PullRequest
1 голос
/ 02 февраля 2012

У меня есть холст WebGL, который содержит где-то около 90 тыс. Вершин, а затем несколько файлов «действий», которые в основном говорят на каждом «временном шаге», какой цвет должна иметь каждая вершина. Это действие разбито на несколько «кусков», каждый из которых хранится в отдельном файле. После того, как действие из одного файла прошло, я прочитал новый как:

    activitiesData = null;
    activitiesData = nextActivitiesFileData.slice(0);

Здесь nextActivitiesFileData асинхронно читается при вызове ajax. Теперь все это прекрасно работает при первом запуске, а иногда даже при некоторых других запусках, но где-то в интервале между 2 и 10 запусками происходит сбой. Теперь я предполагаю, что это связано с тем, что используемые очень большие данные почему-то недостаточно быстро обрабатываются. Я старался всегда быть осторожным, используя var, и присвоил ненужные массивы null.

Что я могу сделать, чтобы попытаться «помочь» процессу сбора мусора? Может ли эта катастрофа быть какой-либо другой природы?

1 Ответ

0 голосов
/ 08 сентября 2012

Если я понимаю ваш вопрос, у вас есть проблема с недостаточно быстрым освобождением данных на GPU?

Существует два подхода к освобождению памяти, выделенной API WebGL. Если вы создаете объект WebGLBuffer с помощью gl.createBuffer (), фактический буфер автоматически освобождается только тогда, когда объект javascript является сборщиком мусора (больше нет ссылок на этот объект), но этот процесс очень сложно предсказать.

В соответствии с последней спецификацией http://www.khronos.org/registry/webgl/specs/latest/#5.14.5, для большинства типов объектов WebGL предусмотрены «удалители», позволяющие программисту лучше контролировать память. Попробуйте вызвать метод void deleteBuffer(WebGLBuffer? buffer), когда вам больше не нужен буфер.

Однако , если у вас случайно возникли проблемы с нехваткой памяти на стороне процессора, я прошу прощения за этот несвязанный ответ.

...