我现在已经读过几个地方,结构的最大实例大小应该是16个字节.
但是我看不出这个数字(16)来自哪里.
浏览网络,我发现一些人认为这是一个近似的数字表现良好,但微软说这是一个很难的上限.(例如MSDN)
有没有人有一个明确的答案为什么它是16字节?
如果我创建一个相对较大的结构,我如何计算它在内存中占用的字节数?
我们可以手动完成,但如果结构足够大,那么我们该怎么做呢?是否有一些代码块或应用程序?
我注意到包装单个浮点数的结构明显比直接使用浮点数慢,大约有一半的性能.
using System;
using System.Diagnostics;
struct Vector1 {
public float X;
public Vector1(float x) {
X = x;
}
public static Vector1 operator +(Vector1 a, Vector1 b) {
a.X = a.X + b.X;
return a;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在添加额外的"额外"字段后,似乎会发生一些魔法并且性能再次变得更加合理:
struct Vector1Magic {
public float X;
private bool magic;
public Vector1Magic(float x) {
X = x;
magic = true;
}
public static Vector1Magic operator +(Vector1Magic a, Vector1Magic b) {
a.X = a.X + b.X;
return a;
}
}
Run Code Online (Sandbox Code Playgroud)
我用来对这些代码进行基准测试的代码如下:
class Program { …Run Code Online (Sandbox Code Playgroud) 我正在阅读Oreilly的Learning XNA 4.0,我注意到作者很容易创建一个结构值,例如Vector2或Rectangle多次,而不考虑性能.
例如,SquareCollision()检查两个游戏实体之间的碰撞的方法在Rectangle每次调用时都会创建两个s,而不是简单地让每个游戏实体保持其自己的Rectangle字段并比较这些字段而不创建任何更多的结构值.
我在很多地方已经多次看到这种模式,这让我很奇怪:
在C#中,结构值的创建是否可以忽略不计?
这真的属于微优化部分吗?
也许是因为我的经验主要是Java,ValueTypes 的概念对我来说很奇怪,但似乎从结构中重新创建一个值(并且多次调用它的构造函数)似乎是对资源的巨大浪费.
我有一个包含歌曲数据的结构:
public struct uLib
{
public string Path;
public string Artist;
public string Title;
public string Album;
public string Length;
}
Run Code Online (Sandbox Code Playgroud)
我的库包含了一个这样的数组uLib.我怎么用艺术家对这个阵列进行排序?我可以在这种类型的数组上调用本机排序函数,还是必须"自己动手"?