C# 内存仅在某些机器中泄漏

C# 内存仅在某些机器中泄漏,c#,.net,wpf,C#,.net,Wpf,我们的应用程序在执行某些周期性操作时出现内存泄漏的情况 测试场景由跨越两个相对复杂的WPF窗口的一系列进程组成 这种情况的奇怪之处在于,内存只会在某些机器上泄漏,而另一些拥有完全相同的硬件的机器可能会工作很长时间(每分钟重复一次这个过程),而它们的内存几乎没有变化(一旦GC清除了使用过的内存,等等) 这是.NET+WPF。你知道从哪里开始找吗?哪些因素只会导致某些机器出现泄漏?(我们讨论的是一个30台机器的测试场景) 我对WPF没有什么经验,图形卡与之有什么关系吗?我会从一个分析器开始,看看热点

我们的应用程序在执行某些周期性操作时出现内存泄漏的情况

测试场景由跨越两个相对复杂的WPF窗口的一系列进程组成

这种情况的奇怪之处在于,内存只会在某些机器上泄漏,而另一些拥有完全相同的硬件的机器可能会工作很长时间(每分钟重复一次这个过程),而它们的内存几乎没有变化(一旦GC清除了使用过的内存,等等)

这是.NET+WPF。你知道从哪里开始找吗?哪些因素只会导致某些机器出现泄漏?(我们讨论的是一个30台机器的测试场景)


我对WPF没有什么经验,图形卡与之有什么关系吗?

我会从一个分析器开始,看看热点在哪里,以及你在这个周期性动作中看到的内存使用模式。很难说是什么导致了这样的问题,但请记住,GC不是确定性的,因此可能会进入这种奇怪的场景


编辑:同意OP对我的帖子的评论。我想我想说的是,即使使用相同的硬件和软件,系统仍然存在一定程度的不确定性

我会从一个分析器开始,看看热点在哪里,以及在这个周期性动作中你会看到什么样的内存使用模式。很难说是什么导致了这样的问题,但请记住,GC不是确定性的,因此可能会进入这种奇怪的场景


编辑:同意OP对我的帖子的评论。我想我想说的是,即使使用相同的硬件和软件,系统仍然存在一定程度的不确定性

> P>我使用Ant Prror来检查内存泄漏的应用程序,有很多其他的应用程序用于测试,但是您应该考虑使用其中一个,并确保没有泄漏的东西,并且巧合的是一些机器正在显示结果。

< P>我使用Ant Prror来检查我的应用程序是否存在内存泄漏,还有很多其他的应用程序用于测试这一点,但是你应该考虑使用其中的一个,确保没有泄漏的东西,并且巧合的是一些机器正在显示结果。

< P>这是一些简单的你可以尝试的。下载、运行应用程序,然后转到进程属性中的“性能”选项卡。在那里,您将看到关于不同句柄的实时统计信息:GDI句柄、用户句柄。。。现在观察这些手柄是否会随着时间的推移而增长。

这里有一些简单的方法,你可以试试。下载、运行应用程序,然后转到进程属性中的“性能”选项卡。在那里,您将看到关于不同句柄的实时统计信息:GDI句柄、用户句柄。。。现在观察这些手柄是否会随着时间的推移而增长。

我想我们已经找到了答案。。。我们仍在测试,但应用程序似乎不再泄漏内存

渲染中发生内存泄漏 当您 执行以下操作之一:

您可以使用软件渲染 渲染三维场景的管道 包括VisualBrush对象或 DrawingBrush对象。比如你 正在使用软件渲染 执行以下操作之一时的管道 以下操作:渲染 使用RenderTargetBitmap创建场景 班级

打印场景。你设定 将呈现层属性设置为0。你 在远程桌面上渲染场景 连接

您可以通过以下方式渲染场景: 在上使用WriteableBitmap类 不使用Windows的计算机 显示驱动程序型号(WDDM)。你用 硬件渲染管道到 使用平铺贴图渲染场景 VisualBrush对象或平铺对象 计算机上的DrawingBrush对象 不使用WDDM


我想我们已经找到了答案。。。我们仍在测试,但应用程序似乎不再泄漏内存

渲染中发生内存泄漏 当您 执行以下操作之一:

您可以使用软件渲染 渲染三维场景的管道 包括VisualBrush对象或 DrawingBrush对象。比如你 正在使用软件渲染 执行以下操作之一时的管道 以下操作:渲染 使用RenderTargetBitmap创建场景 班级

打印场景。你设定 将呈现层属性设置为0。你 在远程桌面上渲染场景 连接

您可以通过以下方式渲染场景: 在上使用WriteableBitmap类 不使用Windows的计算机 显示驱动程序型号(WDDM)。你用 硬件渲染管道到 使用平铺贴图渲染场景 VisualBrush对象或平铺对象 计算机上的DrawingBrush对象 不使用WDDM


不考虑相同的硬件。是否每台机器都安装了完全相同的DLL/库。你能追踪到哪个组件/等等吗。。是否确实存在泄漏?这些机器运行的是相同版本的OS和.NET吗?机器是使用相同的基础软件和基本库克隆的,包括用户和配置。他们之间唯一可能真正不同的是不同的驱动程序,因为有时测试人员安装更新的驱动程序,但实际上无法控制安装了哪个驱动程序。但基本上是相同的硬件和软件。你能详细说明这个周期性动作是什么吗?你也能详细说明你泄漏了多少内存吗?不管是什么硬件。是否每台机器都安装了完全相同的DLL/库。你能追踪到哪个组件/等等吗。。是否确实存在泄漏?这些机器运行的是相同版本的OS和.NET吗?机器是使用相同的基础软件和基本库克隆的,包括用户和配置。他们之间唯一可能真正不同的是不同的驱动程序,因为有时测试人员安装更新的驱动程序,但实际上无法控制安装了哪个驱动程序。B