Память не освобождается после очистки буферов в SharpDX, приложение зависаетC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Память не освобождается после очистки буферов в SharpDX, приложение зависает

Сообщение Anonymous »

У меня возникла проблема с памятью в приложении SharpDX при удалении буферов Direct3D. Изначально я не использовал DisposeCollector и вручную вызывал Dispose() для буферов. Мое приложение зависает при удалении большого количества буферов (около 200 000). После исследования я нашел на GitHub проект на основе SharpDX, в котором используется DisposeCollector. Мне удалось воспроизвести аналогичную проблему с памятью, но с одним ключевым отличием.
Что я заметил:
  • В моем приложении (нет DisposeCollector): приложение зависает, когда
    вызов Dispose() вручную для большого числа буферов.
  • В проекте GitHub: Изначально приложение работало нормально с
    DisposeCollector, но когда я удалил DisposeCollector и
    вручную вызвал Dispose() в буферах (так же, как в моем
    приложении), я смог воспроизвести проблему с памятью . Однако в проекте
    GitHub память в итоге освободилась при следующей
    перерисовке, и приложение не зависло.
  • В моем приложении с DisposeCollector: я попробовал добавить
    DisposeCollector в мое приложение, но оно все равно зависает
    хотя в примере с GitHub это помогает.
< strong>Дополнительные наблюдения:

[*]Проблема возникает только при большом количестве буферов (около< руб />200 000). При обработке меньшего количества объектов проблема не возникает.

[*]Похоже, проблема специфична для графических процессоров NVIDIA. Я тестировал код на
разных видеокартах, и проблема возникает только на оборудовании NVIDIA
.

[*]Я пробовал использую NVIDIA Nsight для отладки, но, к сожалению, этот инструмент
не поддерживает Direct3D 11, поэтому мне не удалось получить дополнительную информацию.


Мой вопрос:
Почему мое приложение зависает при удалении буферов вручную, в то время как в модифицированном проекте GitHub (без DisposeCollector) память задерживается при освобождении, но не зависает? Может ли такое поведение быть специфичным для того, как SharpDX обрабатывает управление памятью на графических процессорах NVIDIA, или здесь дело в чем-то другом?
Начав с примера, который я нашел здесь, я отредактировал D3DApp.cs, добавив< /p>
switch (e.KeyCode)
{
// ...
case Keys.R:
skipRenderLoop = true;
for (var i = 0; i < quad.Length; i++)
{
var q = quad;
//RemoveAndDispose(ref q);
q.Dispose();
quad = null;
}

break;
case Keys.T:
skipRenderLoop = false;
break;
}

аналогично я также отредактировал цикл рендеринга следующим образом:
RenderLoop.Run(Window, () =>
{
if (skipRenderLoop) //

Подробнее здесь: https://stackoverflow.com/questions/790 ... on-freezes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Кадр сопрограммы автоматически уничтожается и освобождается (т.е. освобождается выделенный кадр?) после co_return?
    Anonymous » » в форуме C++
    0 Ответы
    75 Просмотры
    Последнее сообщение Anonymous
  • Поверхность Unity SharpDX IDirect3DSurface для SharpDX.Direct3D11.Texture2D
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Память не освобождается после того, как для конвейера gstreamer установлено значение GST_STATE_NULL
    Anonymous » » в форуме C++
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Память C#/ASP.NET MVC не освобождается
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Память C#/ASP.NET MVC не освобождается
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»