Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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# 为什么创建这些线程不';你不能释放内存吗?_C#_Multithreading_Asp.net Core_Memory Leaks_Garbage Collection - Fatal编程技术网

C# 为什么创建这些线程不';你不能释放内存吗?

C# 为什么创建这些线程不';你不能释放内存吗?,c#,multithreading,asp.net-core,memory-leaks,garbage-collection,C#,Multithreading,Asp.net Core,Memory Leaks,Garbage Collection,我有这样一个密码: class Engine { private static Thread f_thread; private static System.Timers.Timer timeWatch; public static void Start() { try { timeWatch = new System.Timers.Timer(30000); timeWatch.E

我有这样一个密码:

class Engine
{
    private static Thread f_thread;
    private static System.Timers.Timer timeWatch;

    public static void Start()
    {
        try
        {
            timeWatch = new System.Timers.Timer(30000);
            timeWatch.Elapsed += FolderMonitor;
            timeWatch.AutoReset = true;
            timeWatch.Enabled = true;
        }
        catch (Exception ex)
        {
            // catch error
        }
    }

    public static void FolderMonitor(object source, ElapsedEventArgs e)
    {
        f_thread = new Thread(FileScan);
        f_thread.Start();
    }


    public static void FileScan()
    {
        if (timeWatch != null)
        {
            timeWatch.Stop();
        }

        try
        {
            // some operations
        }
        catch (Exception ex)
        {
            // catch error
        }

        timeWatch.Start();
    }
}
在远程计算机上运行的.NET Core 2.2 Windows服务上。 如果我在跑步一周后检查记忆,它会不断长大

它似乎没有释放线程分配的内存(某种内存泄漏)

但是,如果我在线程的FileScan函数中“什么都不做”,它也会长大(较小,但id会)。
发生了什么事?GC不应该自动释放它吗?

属于这些对象的静态对象和变量(即您创建和运行的线程)不会在C#中被垃圾收集

对于要进行垃圾收集的线程,它必须属于非静态对象,必须停止并且清除所有引用(mythread=null)

我在使用线程时也遇到过同样的问题,用C#编写音频流专用服务器


当我发现漏洞时,我不得不重新思考并重新编写大部分代码

你知道GC在不可预测的时间运行吗?@Sweeper是的,但我希望一周至少“一次”:你的方法名称意味着你正在处理文件句柄,你正在处理所有句柄吗?例如,
使用
@RandRandom当然可以。您是如何检查内存的?您是否调用
GC.GetTotalMemory(true)
方法?