Друг и я пишем некоторое программное обеспечение (как побочный проект) и испытываем проблемы с ArrayLists.Метод сортировки ArrayList
Мы храним коллекцию экземпляров пользовательского объекта (содержащего DateTime и две строки) в ArrayList. После того, как мы сохранили все записи в ArrayList, мы сортируем их по DateTime. Проблема в том, что нам нужно хранить 100 000 экземпляров объекта, что означает, что встроенный метод сортировки занимает очень много времени - мы набрали его в течение часа, в какой-то момент.
Скорость сортировки не такая уж большая проблема, но мне было просто интересно, был ли лучший способ сортировать элементы в ArrayList, чем использовать встроенный метод сортировки. Хотя, я думаю, нет, основываясь на том, что встроенный .net-материал будет сильно оптимизирован.
Примечание. Мы используем ArrayLists из-за промежуточного программного обеспечения, которое мы выбрали для создания отчетов в формате PDF, на основе содержимого ArrayList. Думаю, если бы у нас была возможность перейти к списку <>, тогда методы сортировки были бы лучше. Или они?
Edit:
на основе запросов для исходного кода, я выложу некоторые. Но я не уверен, сколько я могу предоставить, что не очевидно.
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 - никогда не использовал его перед этим проектом. Это можно сделать?
Будет ли хранить вещи в базе данных, сортировать их и затем извлекать их в качестве опции? – npinti
100000 экземпляров должны быть чрезвычайно быстрыми, чтобы сортировать любые разумные аппаратные средства. Даже если вы использовали обучаемых мышей для перемещения ваших объектов в памяти, сортировка Java завершилась бы за секунду. Пожалуйста, покажите код, чтобы увидеть, что вы делаете неправильно. – dasblinkenlight
Покажите нам определение класса. Кроме того, если вы вызываете 'ArrayList.Sort (IComparer)', покажите нам 'IComparer'. Как сказал @dasblinkenlight, 100 000 предметов должны сортироваться очень быстро - в миллисекундах. Кроме того, методы сортировки одинаковы. И 'ArrayList', и' List 'используют массив в качестве хранилища резервных копий, а вызов метода' Sort' заканчивается вызовом 'Array.Sort'. –