【问题标题】:Access 2d array with point in wpf C#使用wpf C#中的点访问二维数组
【发布时间】:2010-10-26 09:09:51
【问题描述】:

我有一个类的二维数组。数组的大小非常大(大约 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。

谢谢

【问题讨论】:

  • 不,你没有!...:) 建议您发布导致问题的(定时)代码。
  • 您是否尝试过使用键值字典,使用使用 XY 坐标计算的键?
  • @Mitch:我只是使用循环从数组中获取边界和颜色。
  • @controlbreak:不,我没有尝试键值。如何将它用作数组???
  • 我很惊讶,访问数组非常快。你的意思是第一次填充它需要时间吗? (3000x3000 次迭代?)

标签: c# wpf arrays pointers


【解决方案1】:

尝试使用锯齿状数组而不是多维数组,它们在 Microsoft 的 CLR 实现中是 faster

BoxData[][] boxData=new BoxData[3000][];
for (int i=0; i<3000; i++)
    boxData[i] = new BoxData[3000];     

【讨论】:

  • 好建议,但你应该说出原因。
【解决方案2】:

也许您可以为 BoxData 使用结构而不是类?

Struct 是一种值类型:当您声明数组时,所有内容都将被填充。 您将不再使用循环来创建 new BoxData() 实例。

var x = new BoxData[3000,3000]; // Populated array of BoxData

由于结构与类的限制,您必须以这种方式删除初始化程序...

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2021-10-11
    • 2018-09-03
    • 2013-06-29
    相关资源
    最近更新 更多