gpt4 book ai didi

.net - 为什么 .NET 使用这么多 CPU,这是一个问题吗?

转载 作者:行者123 更新时间:2023-12-04 16:21:47 24 4
gpt4 key购买 nike

(这本来是一个一般性的假设问题,我提示 .NET 是一头 pig ,并有理由乞求。这并不是一个关于我的特定应用程序的问题。)

目前我正在用 C# 重写一些旧的 C++ 代码。我们正在移植所有遗留应用程序。我有占用 MAX 3% CPU 的 C++ 应用程序。大多数情况下,他们都不使用。然后我获取代码,复制并粘贴,然后重新格式化为 C# 语法和 .NET 库,以及 BAM! 50% 的 CPU。这是什么原因?我一开始以为是 JIT,但即使在每个代码路径都经过练习之后,并且整个事情都经过了 JIT 编辑,同样的问题。

我还注意到巨大的内存增加。运行完全加载需要 9 MB 的应用程序现在从 10 MB 开始并以 50 MB 运行。我意识到硬件很便宜,但我想了解导致这种情况的原因。这是引起 panic 的原因,还是 .NET 就是 pig ?

更新 1 对飞碟的回答

我熟悉 C#。我将内容更改为 Linq,等等。我通常采用代码并减少行数,等等。你能举出更多的例子来说明我在 .NET 中做错了什么吗?

更新 2

这是一个一般性问题,但存在问题的特定应用程序如下。

它有一个使用 ODBC 驱动程序从悖论数据库获取数据的线程。然后它使用 Linq 将其转换为 SQL 数据库并将其发布。我已经通过 ANTS 分析器运行了它,似乎填充数据集花费的时间最多。其次是Linq发帖。我知道我的一些领域是反射用法,但我不知道如何在没有这个的情况下做我需要的事情。我打算将我的字符串更改为字符串生成器。这两者有什么区别吗?

(int)datarow["Index"]


ConvertTo.Int32(datarow["Index"])

我将所有字符串连接更改为格式化字符串。这并没有减少头顶。有谁知道数据读取器与数据适配器和数据集之间的区别?

最佳答案

您对 C# 和 .NET 的熟悉程度如何?如果您只是移植保留 C++ 习语的遗留代码,我一点也不惊讶它是一个 pig 。将应用程序逐字从一个平台移植到另一个平台几乎从来都不是一个好主意。 (当然,您并没有说您确实做到了。)此外,如果您是 C++ 开发专家但 .NET 开发新手,您应该期望您的代码在平台上表现得就像您是新手一样。

如果不了解有关该应用程序的更多信息,我们就无法真正判断是什么影响了性能 - 尽管听到字符串连接是罪魁祸首我不会感到惊讶。盒子上有多少个处理器?如果它是 2,那么该应用程序基本上会占用单个线程的所有内容......

.NET 在内存方面通常比 C++ 应用程序更重,但至少在大多数任务的速度方面应该是可比的。使用 50MB 而不是 9MB 听起来比我预期的要多,但我不会立即太担心。

应该使用一个好的分析器来调查内存和 CPU 性能。我可以推荐 JetBrains dotTrace Profiler ,但还有很多其他的。

关于.net - 为什么 .NET 使用这么多 CPU,这是一个问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com