相关疑难解决方法(0)

为什么.NET结构应该少于16个字节?

我现在已经读过几个地方,结构的最大实例大小应该是16个字节.

但是我看不出这个数字(16)来自哪里.

浏览网络,我发现一些人认为这是一个近似的数字表现良好,但微软说这是一个很难的上限.(例如MSDN)

有没有人有一个明确的答案为什么它是16字节?

.net c#

52
推荐指数
4
解决办法
9810
查看次数

如何检查结构消耗的字节数?

如果我创建一个相对较大的结构,我如何计算它在内存中占用的字节数?

我们可以手动完成,但如果结构足够大,那么我们该怎么做呢?是否有一些代码块或应用程序?

.net c# byte

42
推荐指数
6
解决办法
2万
查看次数

堆与堆栈分配的影响(.NET)

从关于Heap和Stack 的SO回答 1中,它提出了一个问题:为什么知道变量的分配位置很重要?

另一个答案,有人指出堆栈更快.这是唯一的含义吗?有人可以提供一个代码示例,其中简单的分配位置更改可以解决问题(例如,性能)?

请注意,此问题是特定于.NET的

1问题从SO中删除.

.net c# heap performance stack

21
推荐指数
2
解决办法
1万
查看次数

为什么在struct中添加额外的字段会大大提高其性能?

我注意到包装单个浮点数的结构明显比直接使用浮点数慢,大约有一半的性能.

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)

.net c# clr mono cil

12
推荐指数
1
解决办法
322
查看次数

为什么struct小于16个字节会更好

我正在研究结构; 如果实例大小小于16个字节,一些书建议创建struct .

为什么?

谢谢你的回复.

.net

11
推荐指数
1
解决办法
1310
查看次数

创建结构值的性能

我正在阅读Oreilly的Learning XNA 4.0,我注意到作者很容易创建一个结构值,例如Vector2Rectangle多次,而不考虑性能.

例如,SquareCollision()检查两个游戏实体之间的碰撞的方法在Rectangle每次调用时都会创建两个s,而不是简单地让每个游戏实体保持其自己的Rectangle字段并比较这些字段而不创建任何更多的结构值.

我在很多地方已经多次看到这种模式,这让我很奇怪:
在C#中,结构值的创建是否可以忽略不计?
这真的属于微优化部分吗?

也许是因为我的经验主要是Java,ValueTypes 的概念对我来说很奇怪,但似乎从结构中重新创建一个值(并且多次调用它的构造函数)似乎是对资源的巨大浪费.

c# xna struct

6
推荐指数
1
解决办法
1663
查看次数

我如何对一系列结构进行排序?

我有一个包含歌曲数据的结构:

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.我怎么用艺术家对这个阵列进行排序?我可以在这种类型的数组上调用本机排序函数,还是必须"自己动手"?

.net c# arrays sorting

3
推荐指数
1
解决办法
8266
查看次数

标签 统计

.net ×6

c# ×6

arrays ×1

byte ×1

cil ×1

clr ×1

heap ×1

mono ×1

performance ×1

sorting ×1

stack ×1

struct ×1

xna ×1