在.net中分配新数组的成本很高 - c#

.Net中分配数组的O时间复杂度是多少?

我猜想,如果数组足够小以适合临时段,则应该为O(1),但是随着n变大,它将很难找到足够的内存,因此可能会改变。

同样,大对象堆可能会碎片化,因此,如果n足够大以使数组适合LOH,则它可能不会是O(1)。

参考方案

临时段中的对象(SOH;小对象堆)在该段上的最后一个已知对象之后分配。它实际上应该只是一个指向那里的指针。

由于没有空白空间,因此不会考虑它们之间的“空白”空间。即使对象不再有引用,它也将一直存在直到被垃圾回收。然后,将压缩SOH,因此再次没有可用空间。

如果SOH不够大,则必须选择一个不同的SOH或创建一个新的段。这将花费更长的时间,但仍为O(1)。

LOH稍微复杂一点,因为它通常不会被压缩。有一些网站声明LOH有一个“免费列表”。但是我不确定这是否真的是列表样式的实现。我猜它具有更好的管理并且像字典一样工作,因此它应该不比O(log(n))差。

需要做什么?

也许从内核获取新的内存。如果是这样,则不需要内存was already zeroed和memset()。
如果该新内存在RAM中不可用,请先将某些内容交换到磁盘。这部分可能会变得非常昂贵,但无法预测。
如果.NET中已经有可用的内存,则可能需要将其初始化为零。但是memset() is optimized 的实现(例如,使用rep stos
使用某处(例如文件)中的值初始化数组。这可能是一个.NET循环,除了交换其中一个昂贵的部件之外。

通常,除非您使用了向您介绍内存吞吐量问题的探查器(如dotMemory),否则我不会考虑担心内存分配的问题。信任唐纳德·克努斯(Donald Knuth):“过早的优化是万恶之源”。

在 Pandas 中放置多列 - python

我正在尝试使用以下代码在熊猫数据框中按索引号删除多列(数据集中的第2列和第70列,分别索引为1和69):df.drop([df.columns[[1, 69]]], axis=1, inplace=True) 我收到以下错误:TypeError: unhashable type: 'Index' 在我的代码中,[1,69]突出显示并说:E…

在.NET中导入模块,然后将其用作对象? - c#

                                我有一个Python模块,我希望能够像C#中的类一样导入它的一部分,并尽可能地访问其方法,例如.NET native。如何使用IronPython完成此操作? 参考方案 看一下这个:https://wiki.python.org/moin/IntegratingPythonWithOtherLa…

在.NET和Python中\ Q \ E是否等效? - c#

PHP && Java正则表达式可让您像这样在\Q和\E之间转义部分正则表达式\d+\Q**(+)**\E\d+ 例如12**(+)**22的此匹配项这很方便,因为没有它,您就必须逃脱特殊字符\d+\*\*\(\+\)\*\*\d+ .NET中有类似的东西吗?关于Python也有同样的问题谢谢 参考方案 Python不支持\Q \E。您可以使…

在(非常大的)熊猫数据框中定位值并将其存储到字典中 - python

我有一个很大的熊猫数据框。数据框如下所示:>> df "a_1" "a_2" "b_1" "c_2" ... "d_1" nan 0.2 nan nan "d_2" 0.1 nan nan 1 "e_1" n…

在.Net Core 2.0中使用会话 - c#

我正在将一个较旧的小型mvc5应用程序移植到.Net Core 2.0和MVC 6,更多地是作为练习来学习如何做。在该应用程序中,我有一个Base Controller类,其主要工作是确保布局模型中包含用户的配置文件对象。 protected override void OnActionExecuted(ActionExecutedContext filte…