Список оптимизации памяти - PullRequest
0 голосов
/ 21 марта 2012

Я создал службу, которая считывает несколько баз данных и загружает их в другую базу данных.

использование памяти огромно, поэтому сейчас я стремлюсь сократить использование памяти.

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

В настоящее время в списке около 3,4 миллиона строк, и это число будет только увеличиваться, поскольку база данных, из которой он взят, станет только больше.

код, о котором я говорю,инициализируется так и используется в цикле foreach:

    private List<int[]> DataIDList_1;
    private List<int[]> DataIDList_2;
    private List<int[]> DataIDList_3;
    public DatabaseTransferService()
    {
        DataIDList_1= new List<int[]>();
        DataIDList_2= new List<int[]>();
        DataIDList_3= new List<int[]>();
    }
    public void injectValues(docID,statID )
    {
          DataIDList_1.Add(new int[] { docID, statID });
    }
    public void insertData(List<int[]> DataIDList)
    {
        foreach (int[] intArrData in DataIDList)
        {
         int DataID = intArrData[0];
//Inserting data in to database based on the list
        }
    }

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

Редактировать: я исключил часть вставки базы данных, потому что она нечасть, на которую я смотрю прямо сейчас.Я знаю, что, вероятно, есть что-то, что можно получить, но в настоящее время я смотрю на одного крупнейшего среднего пользователя памяти, в данном случае это мой список из 3 баз данных.

Edit2: идея, которую я имел, заключалась в том, чтобы загрузить ввсе идентификаторы из 5 баз данных, а затем загрузите их в статистическую базу данных, получая при этом только одну строку на основе идентификаторов в списке. Это означает, что единственное, что у меня в памяти, - это то, над чем я работаю в настоящее время, и идентификаторы всех строки просто чтобы уточнить, есть ли изменения в какой-либо из строк в 5 базах данных, я получу обновление статистической базы данных на основе таблицы revision, в которую я также загрузил идентификаторы.

Спасибозаранее.

1 Ответ

2 голосов
/ 21 марта 2012

Является ли этот вид интерфейса между двумя базами данных? Может быть, вы могли бы сделать нас из yield здесь:

public IEnumerable<MyRecord> GetFromOriginalDB()
{
  // some fetching magic
  yield return myRecord;
}

public void WriteToTargetDB(IEnumerable<MyRecord> records)
{
  foreach(var record in records)
  {
    // insert magic
  }
}

Записи не должны храниться в памяти (кроме самой последней). Тем не менее, это требует много рефакторинга, учитывая, что он работает вообще ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...