|
|
1
29
然而,结构具有完全不同的赋值语义,也不能被继承。因此,我通常会避免使用结构,除非在需要时出于给定的性能原因。 结构
VVV 班 由类(引用类型)编码的值v数组如下所示: pppp …v…v…v.v。。
|
|
|
2
12
在关于何时使用结构的建议中,它指出结构不应大于16字节。你的向量是12字节,接近极限。射线有两个向量,即24字节,这显然超出了建议的限制。
向量仍然可以是一个结构,但光线太大,无法作为结构正常工作。 |
|
|
3
9
|
|
4
7
我认为关键在于你的帖子中的这两个陈述:
和
现在,除非您的结构大小小于或等于4个字节(如果您在64位系统上,则为8个字节),否则如果您只是传递了一个对象引用,那么您在每个方法调用上复制的要多得多。 |
|
|
5
7
随着更多内存的传递,必然会导致缓存抖动。 |
|
|
6
6
我要寻找的第一件事是确保您已经显式地实现了Equals和GetHashCode。如果做不到这一点,则意味着每个结构的运行时实现都会执行一些非常昂贵的操作来比较两个结构实例(在内部,它使用反射来确定每个私有字段,然后检查它们是否相等,这会导致大量的分配)。 一般来说,你能做的最好的事情是在分析器下运行你的代码,看看那些慢的部分在哪里。这可能是一次令人大开眼界的经历。 |
|
|
7
4
你分析过这个应用程序吗?分析是查看实际性能问题所在的唯一可靠方法。在结构上,有些操作通常更好/更差,但除非您对其进行分析,否则您只能猜测问题出在哪里。 |
|
|
8
2
虽然功能相似,但结构通常比类更有效。 您应该定义一个结构,而不是一个类, 作为值类型而不是引用类型。
|
|
|
9
0
我基本上对参数对象使用结构,从函数返回多条信息,以及。。。没有别的了。我不知道这是“对”还是“错”,但我就是这么做的。 |
|
|
10
0
我自己的光线跟踪器也使用结构向量(虽然不是光线),将向量更改为类似乎不会对性能产生任何影响。我现在用三个双倍的向量,所以它可能比应该的要大。但有一件事需要注意,这可能是显而易见的,但这对我来说不是,那就是在VisualStudio之外运行程序。即使您将其设置为优化发布版本,如果您在VS之外启动exe,您也可以获得巨大的速度提升。您所做的任何基准测试都应该考虑到这一点。 |
|
|
11
-1
如果结构很小,并且一次不存在太多的结构,那么应该将它们放在堆栈上(只要它是局部变量而不是类的成员),而不是堆上,这意味着不需要调用GC,内存分配/释放应该几乎是即时的。 将结构作为参数传递给函数时,会复制该结构,这不仅意味着更多的分配/解除分配(来自堆栈,这几乎是瞬时的,但仍然有开销),还意味着仅在两个副本之间传输数据的开销。如果您通过引用传递数据,这不是问题,因为您只是告诉它从何处读取数据,而不是复制数据。 我对此不是100%确定,但我怀疑通过“out”参数返回数组也可能会提高速度,因为堆栈上的内存是为它保留的,不需要复制,因为堆栈在函数调用结束时“展开”。 |
|
|
12
-5
还可以将结构设置为可为空的对象。无法创建自定义类 像
其中,具有结构的可为空
但是(显然)您将丢失所有继承特性 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |