我有一個Wpf幾何對象的抽象大型IEnumerable容器;幾何對象的邊界是非平凡的;它們不代表簡單的幾何形狀,如矩形或圓形,它們是複雜的多邊形。一旦最初填充,列表將永遠不會改變。WPF幾何集合中的優化命中測試
然後我有一個觀點,我想確定哪個幾何體包含那個點。
List<Geometry> list = getList();
var point = new Point(x,y);
list.Any(y => y.Bounds.Contains(point) && y.FillContains(point));
此代碼有效,但它通常很慢。最初的邊界檢查是一個短路,最終比沒有它快50%。我認爲下一層複雜性是設置某種預渲染的地圖字典。
WPF中是否存在更好的方法來以更加面向性能的方式完成此任務?
您是否嘗試將所有這些幾何圖形添加到GeometryGroup中,然後調用GeometryGroup的FillContains方法? – Clemens
這隻能告訴我,如果一個幾何存在於這一點,而不是具體哪一個。我確實在GeometryGroup上嘗試了一些東西。我創建了具有隨機大小的1000個幾何圖形列表。幾何組幾乎慢了10倍。 –