【发布时间】:2018-02-18 22:19:11
【问题描述】:
我想在不允许重复的情况下存储一些像素位置,所以首先想到的是HashSet<Point> 或类似的类。但是,与 HashSet<string> 之类的内容相比,这似乎非常慢。
例如这段代码:
HashSet<Point> points = new HashSet<Point>();
using (Bitmap img = new Bitmap(1000, 1000))
{
for (int x = 0; x < img.Width; x++)
{
for (int y = 0; y < img.Height; y++)
{
points.Add(new Point(x, y));
}
}
}
大约需要 22.5 秒。
虽然下面的代码(这显然不是一个好的选择)只需要 1.6 秒:
HashSet<string> points = new HashSet<string>();
using (Bitmap img = new Bitmap(1000, 1000))
{
for (int x = 0; x < img.Width; x++)
{
for (int y = 0; y < img.Height; y++)
{
points.Add(x + "," + y);
}
}
}
所以,我的问题是:
- 有什么原因吗?我检查了this answer,但 22.5 秒比该答案中显示的数字多得多。
- 有没有更好的方法来存储不重复的点?
【问题讨论】:
-
不使用串联字符串的这些“明显原因”是什么?如果我不想实现自己的 IEqualityComparer,有什么更好的方法?
标签: c# .net performance collections hashset