【问题标题】:Microsoft ENcoder SDK memory leakMicrosoft ENcoder SDK 内存泄漏
【发布时间】:2013-07-01 18:15:01
【问题描述】:

我使用的是 EE4,每次调用 _deviceSource.PreviewWindow = new PreviewWindow(new HandleRef(picBox, picBox.Handle)); 时,内存使用量都会增加大约 60 MB。问题是当我关闭表单并处理_job_devicesource 上的所有资源时,系统不会释放内存......即使我调用CG.collect(); 系统仍然使用那些60MB 做某事。如果我尝试多次调用表单,问题会更糟。在某些时候,我得到内存不足错误,因为内存利用率不断增加。 有什么建议吗?我检查了 SDK 示例,在所有情况下问题仍然存在。所以我的问题是:这是一个错误吗?

【问题讨论】:

  • 泄漏可能发生在本机域(非托管)资源,尤其是与视频相关的资源中,并且可能与涉及的第三方库有关。没有具体信息很难给出建议,但您也许应该 1 检查加载了哪些非 MS DLL 2 问题是否发生在干净的 Windows 中
  • 谢谢@Roman R。我将检查计算机上是否有任何非 Microsoft 编解码器,但我在不同的计算机上尝试过相同的结果。每次我执行 PreviewWindow 属性时,我都可以看到即使在表单完成 Disposed 并调用垃圾收集器之后也没有释放的内存量。如果我保持父表单处于活动状态,则每次调用加载视频的子表单时,内存利用率都会增加。我测试了一些使用 Encoder 4 的其他示例,结果相同。

标签: sdk expression-encoder-sdk expression-encoder-4


【解决方案1】:

我的错...!我没有正确处理所有资源:

_deviceSource.PreviewWindow = null;
_job.RemoveDeviceSource(_deviceSource);
_deviceSource.Dispose();

释放视频上使用的所有内存资源。

【讨论】:

    【解决方案2】:

    我今天遇到了同样的问题。我发现在调用job.RemoveDeviceSource(source)之前你必须先调用source.PreviewWindow.Dispose()

    // The order in which we remove, dispose, and set null is very important. 
    // Anything less creates a huge memory leak.
    // 1st Stop Encoding
    job.StopEncoding();
    
    // 2nd, Must Dispose the Preview Window 
    // Before Calling Job.RemoveDeviceSource << Absolutely
    source.PreviewWindow.Dispose();
    source.PreviewWindow = null;
    
    // 3rd, Remove the Source
    job.RemoveDeviceSource(source);
    
    // 4th, Dispose the Source
    source.Dispose();
    source = null;
    
    // 5th, Dispose the Job
    job.Dispose();
    job = null;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多