首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复制对象会降低性能吗?

复制对象会降低性能吗?
EN

Stack Overflow用户
提问于 2013-07-17 14:45:27
回答 5查看 87关注 0票数 4

首先,我不知道这是不是叫做“复制”对象,所以题目可能是错的。我有一个名为File的自定义类,里面有一堆列表( 5-6个列表中的1000+编号)和一些其他属性。我的所有文件都在一个列表中,以便能够访问它们(LoadedFiles)。

我的问题是:如果我正在写一个方法,而我不想写:

代码语言:javascript
运行
复制
DoSomeOperation(LoadedFiles[2]);

而是:

代码语言:javascript
运行
复制
File file2 = new File();
file2 = LoadedFiles[2];

DoSomeOperation(file2);

这是一种糟糕的做法吗?或者编译器足够聪明,知道它是同一个对象,并直接从原始列表(LoadedFiles)访问它。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-07-17 14:47:56

实际上,您的类是一个引用类型,这意味着file2 = LoadedFiles2行将只复制一个指向创建的对象的引用指针,而不是将该对象的内容复制到一个新对象中。

因此,就性能而言,您需要创建一个文件的新实例:

代码语言:javascript
运行
复制
 File file2 = new File();

然后,您立即将引用切换到不同的对象

代码语言:javascript
运行
复制
file2 = LoadedFiles[2];

从而释放对您刚刚创建的对象的引用。这将导致发生不必要的垃圾收集。如果文件file2 = LoadedFiles2在风格上对你有影响,那就更好了。

研究引用类型与值类型的最好地方是第77页上的C#语言规范http://www.microsoft.com/en-us/download/details.aspx?id=7029

票数 6
EN

Stack Overflow用户

发布于 2013-07-17 14:49:31

在……里面

代码语言:javascript
运行
复制
File file2 = new File();
file2 = LoadedFiles[2];

复制并不重要。只有一个引用被复制。但是创建了一个不必要的File()实例。合并它:

代码语言:javascript
运行
复制
File file2 = LoadedFiles[2];
票数 3
EN

Stack Overflow用户

发布于 2013-07-17 14:49:25

这绝对不是一个糟糕的做法。你不需要复制一个对象,你只需要在它上面保留一个引用(4字节的指针)。

这通常与编码风格有关。我个人不喜欢第一种方法,因为它使阅读变得复杂,而且我经常需要检查函数的返回值,所以

代码语言:javascript
运行
复制
va file2 = LoadedFiles[2];

对我来说是个方便的选择。

也没有写作的意义

代码语言:javascript
运行
复制
File file2 = new File();
file2 = LoadedFiles[2];

只需写下:

代码语言:javascript
运行
复制
var  file2 = LoadedFiles[2];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17692934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档