RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题

全部问题

Martin Hope
FunkyShit
Asked: 2020-01-11 14:04:54 +0000 UTC

c#垃圾收集器不清除内存

  • 9

有一个静态方法

private static bool GetXml(string date)
{
    try
    {
        //Подключаемся к сервису
        KBODataProviderClient client = new KBODataProviderClient();
        //Получаем данные
        string[] result = client.getKBOContracts("2018-12-25", null);

        //Если данных нет
        if (result == null || result.Length <= 0)
        {
            log.InfoFormat("[{0}]|Pbo return 0 rows", runGuid);
            return false;
        }

        if (File.Exists(filePath))
            File.Delete(filePath);

        //Сохраняем XML
        using (StreamWriter sw = new StreamWriter(filePath, true, Encoding.UTF8))
        {
            //пишем первую запись с заголовков
            sw.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
            sw.WriteLine("<CONTRACTS>");
            for (int i = 0; i < result.Length; i++)
            {
                //удаляем заголовок
                string temp = result[i].Replace("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>", "");
                sw.WriteLine(temp);
            }
            sw.WriteLine("</CONTRACTS>");
        }


        log.InfoFormat("[{0}]|Create XML success", runGuid);

        return true;

    }
    catch (Exception ex)
    {
        log.ErrorFormat("[{0}]|GetXml error {1}", runGuid, ex + Environment.NewLine + ex.StackTrace);
        return false;
    }
}

当该方法被调用时,它连接到 WCF 服务,一个字符串数组来自那里(返回 string[]),然后我将其写入文件。问题是,接收到数据的时候,内存当然是吃光的,而且方法完成后,内存并没有被清空。

其实我知道string[]结果变量是一个临时变量,方法完成后应该被垃圾回收器回收,但是这并没有发生(数据占用大约400MB内存)

首先想到的是由于静态方法引起的问题。然后我决定擦链接

result = null;
GC.Collect();

并调用收集器本身。但是即使在这里效果也是0。有什么问题?

更新:

使用方法如下:

if (GetXml(date))
{
    //парсинг
}

添加了这样的方法:

private static bool GetXml(string date)
{
    try
    {
        //Подключаемся к сервису
        KBODataProviderClient client = new KBODataProviderClient();
        //Получаем данные
        string[] result = client.getKBOContracts("2018-12-25", null);

        //Если данных нет
        if (result == null || result.Length <= 0)
        {
            log.InfoFormat("[{0}]|Pbo return 0 rows", runGuid);
            return false;
        }

        if (File.Exists(filePath))
            File.Delete(filePath);

        //Сохраняем XML
        using (StreamWriter sw = new StreamWriter(filePath, true, Encoding.UTF8))
        {
            //пишем первую запись с заголовков
            sw.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
            sw.WriteLine("<CONTRACTS>");
            for (int i = 0; i < result.Length; i++)
            {
                //удаляем заголовок
                string temp = result[i].Replace("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>", "");
                sw.WriteLine(temp);
            }
            sw.WriteLine("</CONTRACTS>");
        }

        log.InfoFormat("[{0}]|Create XML success", runGuid);

        client.Close();
        client = null;

        result = null;

        GC.Collect();

        return true;

    }
    catch (Exception ex)
    {
        log.ErrorFormat("[{0}]|GetXml error {1}", runGuid, ex + Environment.NewLine + ex.StackTrace);
        return false;
    }
}

我关闭了服务客户端,甚至分配了 null 以防万一。接下来,我将 null 分配给字符串并调用收集器。

结果,在接收数据时,内存增加到 320MB (+ - ofk) 并在完成后下降到 + -211 并继续工作。

解析方式不会占用这么多内存,因为解析时不接收数据,内存保持在+-60MB。

在此处输入图像描述 试过 Array.Clear,也是 0 效果(屏幕上图)

c#
  • 3 个回答
  • 10 Views
Martin Hope
stack
Asked: 2020-12-12 15:32:28 +0000 UTC

为什么默认情况下单参数构造函数不显式?

  • 9

为什么默认情况下单参数构造函数不显式?

c++
  • 1 个回答
  • 10 Views
Martin Hope
Harry
Asked: 2020-11-27 17:24:47 +0000 UTC

远程析构函数

  • 9

我正在阅读 Stroustrup 的“A Tour of C++”,在第 77 页我遇到了这个建议:

如果一个类有一个指针成员,它可能需要一个用户定义或删除的析构函数,复制和移动。

那些。这好像是

如果一个类有一个指针成员,它可能需要一个自定义或远程析构函数、复制和移动。

关于复制和移动 - 毫无疑问,一切都很清楚,关于自定义析构函数 - 也是。

但是远程析构函数是什么意思呢?不打算写

~Class() = delete;

它能给什么?毕竟,这样的对象既不能在离开范围时自动删除,也不能通过delete(new分别是明确的、本地的和选择的)删除。

这里的深层含义是什么——创造不朽的对象?:)

PS 写信给 Stroustrup,要求解释 :) 他同意措辞不是最准确的,提出了一个变体

如果一个类有指针成员,考虑是否需要用户定义或删除的析构函数,复制和移动;

至于我,差异很小,但是......在这方面,@lёxölüt 的答案更接近现实,因此我接受它。

c++
  • 2 个回答
  • 10 Views
Martin Hope
iluxa1810
Asked: 2020-11-16 17:21:58 +0000 UTC

在 IL 中哪些是 .NET 高级语言无法做到的?

  • 9

一般来说,之所以提出这个问题,是因为另一个问题的答案。

它认为IL可以在没有封装的情况下访问代码中另一个类的私有字段,自然而不需要使用昂贵的反射。

(是这样吗?)

事实证明,我可以将IL编译后获得的 -code并添加一些高级语言无法实现的C#奇异行为(其中不禁止),编译并将此程序集连接到项目并透明使用IL它就一些C#?

实际上,这些库的用户允许多少所有内容IL以及可能产生的副作用的问题是令人感兴趣的。

.net
  • 3 个回答
  • 10 Views
Martin Hope
Ain Mditrevi
Asked: 2020-11-09 15:03:38 +0000 UTC

C中的这个表达式是什么?

  • 9

在代码中找到这一行:

void *ptr = ((char*)l_p - (unsigned int)&((struct node_s*)0)->list);

我不明白它在这种情况下的含义&以及为什么在这种情况下使用它unsigned int。如果可能,请用文字解释。

结构本身的表示在这里:

struct node_s{
    char a;
    char b;
    char c;
    char d;
    struct list_head list;
};
linux
  • 1 个回答
  • 10 Views
上一页
下一页

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5