我和一个朋友正在编写一些软件(作为一个副项目)并且遇到了 ArrayLists 的问题。
我们将自定义对象的实例集合(包含一个 DateTime 和两个字符串)存储在一个 ArrayList 中。一旦我们将所有条目存储在 ArrayList 中,我们将按 DateTime 对它们进行排序。问题是,我们必须存储对象的 100,000 个实例,这意味着内置的排序方法需要很长时间——我们有一次将它计时了一个多小时。
排序的速度并不是什么大问题,但我只是想知道是否有比使用内置排序方法更好的方法来对 ArrayList 中的元素进行排序。虽然我猜不是,但基于内置的 .net 内容将得到高度优化这一事实。
注意:我们使用 ArrayLists 是因为我们选择使用中间件来根据 ArrayList 的内容生成 PDF 报告。我想,如果我们有机会移到 List<> 那么排序方法会更好。或者他们会?
编辑:
根据对源代码的要求,我会发布一些。但我不确定我能提供多少这并不明显。
public class DataObject : ICompareable
{
private DateTime timeStamp;
private string description;
private string detail;
public DataObject (DataTime inTimeStamp, string inDescription,
string inDetail)
{
this.timeStamp = inTimeStamp;
this.description = inDescription;
this.detail = inDetail;
}
int IComparable.CompareTo(object that)
{
DataObject myThat = (DataObject)that;
return this._timestamp.CompareTo(myThat._timestamp);
}
}
// .... //
ArrayList dataList = new ArrayList();
for (int i = 0; i < database.Packets.Count; i++)
{
dataList.Add(new DataObject(database.Packet(i).GetTimeStamp(),
database.Packet(i).GetDescription(),
database.Packet(i).GetDetail());
}
// ... same as the above, but for other data
// ... types (all parse to strings when pulled
// ... from the database
dataList.Sort();
大致就是这样。我们从 SQLCEME3.5 数据库中的多个位置提取数据(我们使用的是 .net 3.5,因此不能使用 LINQ),将它们放在对象的 ArrayList 中,并在管道的下方使用该对象 ArrayList。
我们希望从数据库中的多个位置获取所有记录(一些是数据包,一些是字符串(提示),一些是其他类型,全部解析为字符串)并按时间戳对它们进行排序。我们希望所有数据散布在一个数据包后面,然后是一些字符串值,然后是一些对象值,如果这是它们存储/生成的顺序。
我们对数据库具有只读访问权限,因此我认为使用数据库本身对它们进行排序不是一个好主意(甚至可能)。话虽如此,我对 SQL 真的很陌生——在这个项目之前从未使用过它。可以这样做吗?