Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 内存泄漏:TimerCallbacks根引用的对象_C#_Memory Leaks - Fatal编程技术网

C# 内存泄漏:TimerCallbacks根引用的对象

C# 内存泄漏:TimerCallbacks根引用的对象,c#,memory-leaks,C#,Memory Leaks,遗留应用程序中存在内存泄漏,因此我对代码不太了解。我使用MemProfiler进行了分析,发现越来越多的对象被TimerCall对象引用。这些TimerCallbacks由\u TimerCallback对象引用,它们是根的子对象。该图形看起来像Root->\u TimerCallback->TimerCallback->MyObject 由于MyObject在其构造函数中需要TimerCallback,因此有以下几种调用: new MyObject(int timeout, new Timer

遗留应用程序中存在内存泄漏,因此我对代码不太了解。我使用MemProfiler进行了分析,发现越来越多的对象被
TimerCall
对象引用。这些
TimerCallback
s由
\u TimerCallback
对象引用,它们是根的子对象。该图形看起来像
Root
->
\u TimerCallback
->
TimerCallback
->
MyObject

由于
MyObject
在其构造函数中需要
TimerCallback
,因此有以下几种调用:

new MyObject(int timeout, new TimerCallback(SomeCallbackMethod));
老实说,这样做对我来说很尴尬,但正如我写的那样,这是一个遗留应用程序,它是用“C风格”C#编写的,有很多空赋值和
Dispose()
调用


那么如何从根目录中删除对
TimerCallback
的这些引用呢?

这看起来像是您的
TimerCallback
正在
Timer
对象中使用。找出为什么有很多计时器处于活动状态。它们很可能是保持回调活动的真正根源


我只是环顾了一下反射器中的
\u TimerCallback
类,虽然我不完全理解所发生的事情,但我认为这类课程是一种误导。我认为根本原因是计时器(甚至可能是禁用的计时器)。

我还没有找到内存泄漏的解决方案,但问题看起来确实是由于一些计时器对象没有被正确删除,因为代码中包含大量新的计时器(…)调用。编写代码的人不知道这样一个事实,即您可以启动和停止计时器,而无需每次创建一个新实例。您是否找到了解决方案?我的应用程序中确实有计时器代码,但我确信当我处理完计时器后,我总是会处理掉它们,我也遇到了同样的问题。