SQL Server CE использует слишком много памяти - PullRequest
0 голосов
/ 10 августа 2011

Я использую SQL Server CE в качестве базы данных в своем приложении C # WinForm, мое приложение собирает прокси с различных веб-сайтов и вставляет в таблицу SQL Server CE только один столбец.

Таблица прокси:

  1. IP-адрес

Но, похоже, при каждой вставке потребление памяти медленно увеличивается, приложение запускается с 11 000 памяти, к тому времени, когда она достигает 1 000 000, использование памятисоставляет около 87 000, и запросы становятся очень медленными, что плохо для моего приложения, изначально я думал, что есть утечка памяти, но не мог ее найти, вот мой код для вставки.

public void InsertData(DemoTable _table)
{
    string strInsertQuery = string.Format("INSERT INTO DemoTable (Value) VALUES ({0})", _table.Value);

    using (connection = new SqlCeConnection(connectionString))
    {
        connection.Open();
        using (command = connection.CreateCommand())
        {
            command.CommandText = strInsertQuery;
            command.ExecuteNonQuery();
        }
    }
}

Этонормально для SQL Server CE или что-то не так с моим приложением, я также пытался принудительно собирать мусор, но безрезультатно.

Мое приложение будет собирать максимум 1 миллион прокси, процесс сбора очень быстрый, около 500 до1700 прокси в секунду, я отображаю их, используя виртуальный режим подкачки DataGridView, поэтому все собранные прокси видныпользователь, но использующий пейджинг, но я не могу получить такую ​​же производительность из базы данных SQL Server CE, она не поспевает за другим процессом.

Подскажите, пожалуйста, есть ли у меня альтернатива SQL Server CE?, который идеально подходит для этого типа работы, или каким-либо образом я могу не отставать от быстрого процесса уборки урожая?

1 Ответ

2 голосов
/ 10 августа 2011

Переключение на SqlCeResultSet и SqlCeUpdatableRecord определенно поможет ускорить процесс. Я не уверен, что это поможет с использованием памяти.

Также поможет сохранение соединения с базой данных открытым. SQL CE не обрабатывает пулы соединений, как SQL Server, и при открытии нового соединения для каждого запроса возникают значительные накладные расходы. Это может объяснить часть использования памяти, о которой вы сообщили.

Я бы также серьезно подумал о переходе на SQL Server Express или SQLite. Любой из них лучше подходит для этой задачи.

...