gpt4 book ai didi

c# - 优化 .NET 中大系列数据的存储和处理

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:17 25 4
gpt4 key购买 nike

我这里有一个案例,想听听专家的一些意见:)

情况:

  • 我有一个包含“Int32”和“Double”值的数据结构,总共有 108 个字节。
  • 我必须处理大量的这种数据结构。它类似于(概念上的,我将使用 for 循环代替):
double result = 0;
foreach(Item item in series)
{
double += //some calculation based on item
}
  • 我预计该系列的大小约为 10 Mb。
  • 要有用,必须处理整个系列。全有或全无。
  • 系列数据永远不会改变。

我的要求:

  • 内存消耗不是问题。我认为现在,如果用户的机器上没有几十 Mb 的可用空间,他可能有更深层次的问题。
  • 速度一个问题。我希望迭代尽可能快。
  • 没有非托管代码或互操作,甚至不安全。

我想知道的

  • 将项目数据结构实现为值或引用类型?据我所知,值类型更便宜,但我想如果我使用值类型,每次迭代都会为每个项目制作一个副本。这个副本比堆访问快吗?
  • 如果我将访问器实现为匿名属性,会有什么实际问题吗?我相信这会增加足迹。而且 setter/getter 无论如何都会被内联。我可以放心地假设吗?
  • 我正在认真考虑直接在代码中创建该系列的一个非常大的静态只读数组(使用数据源很容易做到这一点)。这将给我一个 10Mb 的程序集。我有什么理由应该避免这种情况?

希望有人能给我一个好的意见。

谢谢

最佳答案

Implement the item data structure as a value or reference type? From what I know, value types are cheaper, but I imagine that on each iteration a copy will be made for each item if I use a value type. Is this copy faster than a heap access?

以两种方式对其进行编码,并根据现实世界的输入积极地对其进行分析。然后您就会确切地知道哪个更快。

Any real problem if I implement the accessors as anonymous properties?

真正的问题?没有。

I believe this will increase the footprint. But also that the getter will be inlined anyway. Can I safely assume this?

您只能安全地假设规范所保证的事情。规范不保证。

I'm seriously considering to create a very large static readonly array of the series directly in code (it's rather easy do this with the data source). This would give me a 10Mb assembly. Any reason why I should avoid this?

我想你可能是太担心了。

如果我的回答看起来不屑一顾,我很抱歉。您是在随机询问 Internet 上的人推测两件事中哪一个更快。我们可以猜测,而且我们可能是对的,但是您可以在眨眼之间用两种方式编写代码并确切知道哪个更快。那么,就这样做吗?

但是,我总是首先编码的正确性、可读性和可维护性。我预先建立了合理的性能要求,然后查看我的实现是否满足这些要求。如果是这样,我继续前进。如果我的应用程序需要更多性能,我会分析它以找出瓶颈,然后我开始担心。

您问的是一个需要 ~10,000,000/108 ~= 100,000 次迭代的微不足道的计算。这甚至是您应用程序中的瓶颈吗?说真的,你想多了。只需编写代码并继续。

关于c# - 优化 .NET 中大系列数据的存储和处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9229155/

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