试图保持我的C#代码优化,我发现如果我有一个结构元素列表,每个插入将是一个完整的副本 - 我想避免的东西.
在C++中,我只是保留一个指针列表,所以我想知道我是否可以使用C#做同样的事情,也许将列表作为结构的引用列表.不幸的是,结构不能变成一个类,因为它是XNA库的一部分(Vector3,Matrix等).无论如何 - 如果可能,格式和用法会如何?
谢谢.
您无法在C#中创建对结构的可存储引用,但您可以为您的值类型创建引用类型包装器.也就是说,与复制内存相关的开销对于小型结构来说不会很高.您的分析是否表明这是一个问题?
下面是包含在引用类型中的值类型的示例.请注意,这仅适用于对特定值的所有访问都是通过包装引用类型的情况.这违反了标准的绝缘规则(因为公共领域),但这是一个特例.
public sealed class Reference<T>
where T: struct
{
public T Value;
public Reference(T value)
{
Value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
另一件值得注意的事情是,Reference包装器本身可以采用null值,尽管它的内容是不可为空的.如果您愿意,还可以添加隐式或显式转换运算符以使其更透明.
不,基本上.选项:
作为最后一个例子;
if(arr[idx].X == 20) SomeMethod(ref arr[idx]);
Run Code Online (Sandbox Code Playgroud)
.X和SomeMethod中的任何用法都是直接在数组中访问值,而不是副本.这仅适用于矢量(数组),而不是列表.
建立refs列表的一个原因是不可能的:它允许你在列表中存储堆栈中变量的地址; 数组通常比堆栈上的变量更长,所以这将是非常不安全的
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |