我有一个类的二维数组。数组的大小非常大(大约3000 * 3000),使用普通的行和列方法访问数组需要花费很多时间。为此,我想使用指针来访问数组。
以下是我的数组代码:
班级定义:
Class BoxData
{
Size _bound;
bool _isFilled=false;
Color _color=Colors.White;
public Size Bounds
{
get
{
return _bound;
}
set
{
_bound=value;
}
}
public bool IsFilled
{
get
{
return _isFilled;
}
set
{
_isFilled=value;
}
}
public Color FillColor
{
get
{
return _color;
}
set
{
_color=value;
}
}
}
在应用程序中用作数组的类:
BoxData[,] boxData=new BoxData[3000,3000];
我想用指针访问boxData。
由于
答案 0 :(得分:2)
尝试使用锯齿状数组而不是多维数组,在Microsoft的CLR实现中它们是faster
BoxData[][] boxData=new BoxData[3000][];
for (int i=0; i<3000; i++)
boxData[i] = new BoxData[3000];
答案 1 :(得分:2)
也许你可以使用结构而不是BoxData的类?
Struct是一种值类型:当您声明数组时,所有内容都将被填充。
您将不再使用循环来创建new BoxData()
个实例。
var x = new BoxData[3000,3000]; // Populated array of BoxData
由于struct vs class限制,您必须以这种方式删除初始化程序...
struct BoxData
{
Size _bound;
bool _isFilled; // = false;
Color _color; // = Color.White;
public Size Bounds
{
get
{
return _bound;
}
set
{
_bound = value;
}
}
public bool IsFilled
{
get
{
return _isFilled;
}
set
{
_isFilled = value;
}
}
public Color FillColor
{
get
{
return _color;
}
set
{
_color = value;
}
}
}
...并使用循环初始化默认值会更快。
for (int j = 0; j < 3000; j++)
for (int i = 0; i < 3000; i++)
x[i, j].FillColor = Color.White;