使用数组构造的.NET PointCollection与从PointCollection构造的.NET PointCollection的行为不同

使用数组构造的.NET PointCollection与从PointCollection构造的.NET PointCollection的行为不同,.net,arrays,polygon,shape,.net,Arrays,Polygon,Shape,我有一个System.Windows.Controls.Canvas,通过编程将System.Windows.Shapes.Polygon放置在其中: private Canvas mMainCanvas = new Canvas(); private Polygon mHistogram = new Polygon(); 稍后,我用大量事件(大约1000000个)更新多边形。我一直在努力使这一切尽可能快和高效(这本身就是一场斗争)。我最近的一次尝试是将值累积到PointCollection中

我有一个System.Windows.Controls.Canvas,通过编程将System.Windows.Shapes.Polygon放置在其中:

private Canvas mMainCanvas = new Canvas();
private Polygon mHistogram = new Polygon();
稍后,我用大量事件(大约1000000个)更新多边形。我一直在努力使这一切尽可能快和高效(这本身就是一场斗争)。我最近的一次尝试是将值累积到PointCollection中,并定期重新设置多边形集合(mHistogram):

inti=10000;
PointCollection mPc=新的PointCollection(256);
双y;
p点;
专用void事件处理器(int-bin){
如果(0
虽然速度还不够快,但这似乎还可以。因此,我将mPc的类型从一个点集合更改为一个简单的点数组(点[]),希望这能使访问速度加快一点。然而,当我这样做时,我的多边形(mHistogram)根本无法更新

这让我感到困惑。我从IEnumerable(mPc)创建了一个新的PointCollection,它应该创建一个行为与任何其他PointCollection一样的新PointCollection。为什么使用数组(点[])创建时它的行为会有所不同


谢谢。

您描述的问题似乎不太可能,可能与代码的另一个问题有关。查看此简单测试,您可以验证是否确实创建了相同的集合:

PointCollection collection1 = new PointCollection(new Point[] { new Point(1, 1), new Point(2, 2) });
PointCollection collection2 = new PointCollection(collection1);
for (int i = 0; i < collection2.Count; i++) {
    if (collection1[i] != collection2[i])
        throw new InvalidOperationException();
}
以及:

请记住,以下内容是不同的:

var collection = new PointCollection(256);
var array = new Point[256];

集合包含0项,但有空间容纳256个预分配项。该数组包含256个项目,并且只有空间容纳256个项目

您描述的问题似乎不太可能,可能与代码的另一个问题有关。查看此简单测试,您可以验证是否确实创建了相同的集合:

PointCollection collection1 = new PointCollection(new Point[] { new Point(1, 1), new Point(2, 2) });
PointCollection collection2 = new PointCollection(collection1);
for (int i = 0; i < collection2.Count; i++) {
    if (collection1[i] != collection2[i])
        throw new InvalidOperationException();
}
以及:

请记住,以下内容是不同的:

var collection = new PointCollection(256);
var array = new Point[256];

集合包含0项,但有空间容纳256个预分配项。该数组包含256个项目,并且只有空间容纳256个项目

如果mPc是列表集合或其他基于System.Collections的对象,则多边形似乎也会更新。显然,它与简单数组有关,但我仍然不知道是什么。如果mPc是列表集合或其他基于集合的系统对象,则多边形似乎也会更新。很明显,它与简单数组有关,尽管我仍然不知道是什么。Code裸体,谢谢你的反馈。我不确定我以前在做什么。这很可能是我的错误和初始化错误。尽管如此,您是正确的,我也同意,多边形不应该关心PointsCollection是如何构造的,事实上,如果操作正确,它就不会。Code裸体,感谢您的反馈。我不确定我以前在做什么。这很可能是我的错误和初始化错误。尽管如此,您是正确的,我也同意,多边形不应该关心PointsCollection是如何构造的,事实上,如果操作正确,它就不会。
var collection = new PointCollection(256);
var array = new Point[256];