- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里有很多关于 MemberwiseClone 的问题,但我找不到任何内容。
据我了解,MemberwiseClone 基本上只是复制一个对象的内存区域,将其转储到其他地方并将其称为该对象的新实例。显然非常快,而且对于大对象来说,这是制作副本的最快方法。对于具有简单构造函数的小对象,创建实例并复制各个属性会更快。
现在,我有一个使用 MemberwiseClone 的紧密循环。由于 MemberwiseClone 总是创建一个新实例,这会导致大量内存分配和重新分配,这对性能来说不是很好。我已经为一个非常大的对象编写了一个自定义副本,该副本将所有属性单独复制到一个现有对象上,总体上比使用 MemberwiseClone 快一点,
我觉得如果我可以获取整个内存块并将其转储到现有对象上,我将获得不错的性能提升,因为 GC 无需担心任何事情。希望我也能摆脱这条消息:
澄清一下,我想尽快将属性从一个现有对象复制到另一个对象。我只需要一个浅拷贝。
Message 2 DA0023: (Average)% Time in GC = 19.30; % Time in GC is relatively high. This indication of excessive amount of garbage collection overhead could be impacting the responsiveness of your application. You can gather .NET memory allocation data and object lifetime information to understand the pattern of memory allocation your application uses better.
我对代码安全没有任何限制,速度是这里游戏的目标。
请不要评论询问这是否真的有必要或谈论过早的优化。
感谢您的帮助。
采纳下面的建议,在对象中嵌入一个结构并将所有属性存储在其中。然后我可以获取该结构的副本以复制单个分配中的所有属性。与逐字段复制相比,这产生了超过 50% 的速度提升,并且与每次使用 MemberwiseClone 创建新对象相比,速度提升了大约 60%。
最佳答案
如果您的类不可继承,您可以将类的整个状态存储在公开字段结构中(公开字段,而不是属性!)。这将要求您在所有字段名称前加上结构的名称,这在源代码中会很丑陋,但访问该结构中的字段将与访问直接放置在封闭类中的字段一样快。但是,这样做将使您能够使用简单的赋值语句将结构从一个对象实例复制到另一个对象实例。
关于c# - MemberwiseClone 相当于现有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18086950/
这里有很多关于 MemberwiseClone 的问题,但我找不到任何内容。 据我了解,MemberwiseClone 基本上只是复制一个对象的内存区域,将其转储到其他地方并将其称为该对象的新实例。显
这里有很多关于 MemberwiseClone 的问题,但我找不到任何内容。 据我了解,MemberwiseClone 基本上只是复制一个对象的内存区域,将其转储到其他地方并将其称为该对象的新实例。显
我得到了: internal sealed class A : ICloneable { public Collection CollectionB { get; set; } pub
我需要定义一个执行浅拷贝的 Clone() 方法。 (不需要深拷贝) 但我也需要它来复制派生类的成员。 如果我有 class Base { int baseMember; publ
我想创建一个更受限制的 MemberwiseClone 版本,但意识到我自己的 C# 代码可以将属性添加到对象的唯一方法是使用 dynamic,但是不能赋予对象与原始对象相同的类型。我的另一个更丑陋的
我对如何使用 MemberwiseClone() 方法感到困惑。我查看了 MSDN 中的示例,他们通过 this 关键字使用它。 为什么我不能像GetType() 或ToString() 那样直接调用
我对下面这段代码感到困惑, Developer devCopy = (Developer)dev.Clone(); Developer 类的 Clone 方法只是创建一个 Employee 克隆,然后
我有 ApiContext 对象(没有代码),想为它制作扩展方法 代码有什么问题?它说: cannot use this in static member ApiContext 驻留在单例模式中 pu
是否可以在没有 EntityKey 的情况下 MemberwiseClone 从 ObjectContext 检索到的对象?我在 C# 中使用 Entity Framework 4.1 如果我尝试更改
我正在大量自定义对象上实现 ICloneable。一些对象具有 DateTime 类型,这是一个结构值。我知道可以使用 newDateTime = oldDateTime 复制此值,但是如果我在我的对
如果我有这样的代码 class Student { public string RollID { get; set; } } class Person { public Student
我试图在我正在处理的 C# 应用程序中实现撤消/重做堆栈,方法是在调用撤消时将对象恢复到之前的状态。我有一个基本上像这样的“ Action ”类: class Action { object
首先让我说我知道它是一个 protected 方法,我不应该调用它,但它不应该工作,因为 MemberwiseClone 是在 Object 类和 String 继承自它? 所以这是克隆方法(我删除了
我正在将 C# 代码转换为 Java。有很多不同的地方依赖.Net MemberwiseClone在我正在转换的代码中。 好像都是浅拷贝。那么是否可以简单地用 Java 的 clone() 替换这些调
我想知道为什么 MemberwiseClone 被定义为 protected 。这意味着只有派生类型可以访问它。如果它被定义为公共(public),有什么问题? 最佳答案 Pavel Minaev's
我试图在我的自定义类上使用 .MemberwiseClone(),但它抛出了这个错误: Cannot access protected member 'object.MemberwiseClone()
真的很抱歉再次提出这样一个菜鸟问题,但我真的很难理解我在网上找到的答案,我只需要确定...... 我正在将一些 Javascript 转换为 C#,JS 中的其中一件事就是该行 this.shared
我是一名优秀的程序员,十分优秀!