Каков наиболее эффективный способ хранения больших объемов данных в таблице в С#

Я хотел бы хранить большие объемы данных (текста) в таблице с шестью столбцами и до десяти тысяч строк.

Я буду строить таблицу программно. (Это означает, что я хочу иметь возможность добавлять строки по ходу работы)

Является ли datatable моим лучшим вариантом? Я планирую привязать его к Telerik Grid Control для ASP.NET.

Мне интересно, мне лучше пойти с другим типом класса, о котором я не знаю.

Я буду использовать возможности элементов управления для сортировки и страницы, но я не знаю, имеет ли это слишком большое значение для базового объекта.

Когда я говорю об эффективности, следует учитывать поиск, затем хранение, а затем время программиста.


person Matt    schedule 06.08.2009    source источник
comment
В чем эффективность? время поиска, хранения, время программиста?   -  person Jeff Leonard    schedule 07.08.2009
comment
Поиск, затем хранение, затем время программиста. Я также добавлю это к основному описанию вопроса.   -  person Matt    schedule 07.08.2009


Ответы (4)


Я бы создал класс со свойствами, которые представляют эти шесть строк, а затем использовал бы его в списке. Очень быстро:

public class Result
{
    public string Title { get; set; }
    public double Score { get; set; }
    public string Summary { get; set; }
    // etc.

    public Result(string title, double score, string summary)
    {
        Title = title;
        Score = score;
        Summary = summary;
    }

    public Result() { }
}

public class Test
{
    public static IList<Result> GetResults()
    {
        List<Result> results = new List<Result>();

        results.Add(new Result("First result", 0.914, "This is the summary"));
        results.Add(new Result("Second result", 0.783, "More summary...."));
        results.Add(new Result { Title = "Third", Score = 0.54, Summary = "Anonymous I am..." });
        // etc
        return results;
    }
}

Затем вы можете перечислить коллекцию List или привязать ее к элементу управления с привязкой к данным или использовать ее с LINQ и т. д.

person Dan Diplo    schedule 06.08.2009

Во-первых, сделайте то, что описывает Дэн Дипло. DataTable — это базовая структура данных для класса DataSet. Наборы данных печально известны своей неэффективностью использования памяти.

Во-вторых, для ускорения работы: не возвращайте все 10 000 записей на одну страницу. Показать подмножество за раз (например, 20) в постраничной сетке. Чем меньше данных вам нужно передать и проанализировать, тем лучше.

Затем, если возможно, отключите состояние просмотра в сетке. ViewState может увеличить размер вашей страницы (в некоторых случаях в 2 раза или хуже). Это проблема как для браузера (просмотр страницы), так и для сервера (необходимость перезагрузки всех этих данных ViewState). Избегайте этого как можно лучше.

Если вам нужно иметь ViewState, а производительность по-прежнему остается проблемой, переместите ViewState на сервер, чтобы он не передавался в браузер.

person Chris Brandsma    schedule 06.08.2009
comment
Не могли бы вы подсказать, где я могу больше узнать о проблемах с производительностью при использовании ViewState? ТиА - person abatishchev; 07.08.2009
comment
weblogs.asp.net/infinitiesloop/archive/ 2006/08/03/ и msdn.microsoft.com/en -us/library/ms998549.aspx — хорошее место для начала. - person Chris Brandsma; 07.08.2009

Если вы хотите быть эффективными с точки зрения часов программирования или времени поиска в многопользовательской среде, вам следует рассмотреть возможность использования SQL Server.

person Jeff Leonard    schedule 06.08.2009
comment
На самом деле это результаты Lucene, но мне интересно, есть ли какие-либо другие новые классы данных для этого типа вещей. - person Matt; 07.08.2009

Используйте базу данных.

person Toby Allen    schedule 06.08.2009