3

在我的程序中,如果我无法连接到数据库,我会将数据写入文件,并且我有一个单独的线程,该线程具有计时器,每 25 秒检查一次连接可用性,如果它可以连接,则将数据从文件传输到主数据库并删除该文件。问题是我从不停止这个计时器,这会导致内存泄漏吗?如果我只是运行我的程序并监视任务管理器,我可以看到内存使用量不断增加如果我禁用计时器然后运行我的应用程序,那么内存是稳定的

    public BackgroundWorker()
    {
        _backgroundWorkerThread = new Thread(new ThreadStart(ThreadEntryPoint));
        _timer = new SWF.Timer();
        _timer.Tick += new EventHandler(_timer_Tick);
        _timer.Interval = 25 * 1000;
        _timer.Enabled = true;
    }

    void _timer_Tick(object sender, EventArgs e)
    {
        bool lanAvailabe = NetworkInterface.GetIsNetworkAvailable();
        if (lanAvailabe)
        {
            if (!GetListOfFiles())
            {
                return;
            }
        }
        else
            return;
    }

GetListofFiles() 的实现

    private bool GetListOfFiles()
    {
        string sourceDirectory = pathOfXmlFiles;
        if (!Directory.Exists(sourceDirectory))
        {
            return false;
        }
        var xmlFiles = Directory.GetFiles(sourceDirectory, "*.xml");
        if (!xmlFiles.Any())
        {
            return false;
        }
        foreach (var item in xmlFiles)
        {
            ReadXmlFile(item);
        }
        foreach (var item in xmlFiles)
        {
            if (_writtenToDb)
            {
                File.Delete(item);
            }
        }
        return true;
    }

读取xml文件的方法

    private void ReadXmlFile(string filename)
    {
        string[] patientInfo = new string[15];
        using (StreamReader sr = new StreamReader(filename, Encoding.Default))
        {
            String line;
            line = sr.ReadToEnd();
            if (line.IndexOf("<ID>") > 0)
            {
                patientInfo[0] = GetTagValue(line, "<ID>", "</ID>");
            }
            if (line.IndexOf("<PatientID>") > 0)
            {
                patientInfo[1] = GetTagValue(line, "<PatientID>", "</PatientID>");
            }
            if (line.IndexOf("<PatientName>") > 0)
            {
                patientInfo[2] = GetTagValue(line, "<PatientName>", "</PatientName>");
            }
            if (line.IndexOf("<Room>") > 0)
            {
                patientInfo[3] = GetTagValue(line, "<Room>", "</Room>");
            }

        }
        WriteToDb(patientInfo);
    }
4

1 回答 1

2

如果我只是运行我的程序并监控任务管理器,我可以看到内存使用量不断增加

获取分析器。任务管理器不是正确的工具。无法说出发生了什么事。这并不意味着你有泄漏。也许只是 GC 没有运行,因为有足够的空间等。

于 2012-09-04T01:14:37.037 回答