byte [] и эффективно передается по ссылке

Так что это связано с работой с кучей больших объектов и попыткой свести к минимуму количество раз, когда я создаю экземпляр байта []. По сути, у меня есть OutOfMemoryExceptions, и я чувствую, что это потому, что мы создаем слишком много байтовых массивов. Программа отлично работает, когда мы обрабатываем пару файлов, но ее нужно масштабировать, а в настоящее время она не может.

Короче говоря, у меня есть цикл, который извлекает документы из базы данных. В настоящее время он извлекает по одному документу за раз, а затем обрабатывает документ. Документы могут варьироваться от менее чем мег до 400+ мег. (следовательно, почему я обрабатываю по одному). Ниже приведен псевдокод и до того, как я его оптимизировал.

Итак, шаги, которые я делаю:

Сделайте вызов в базу данных, чтобы найти самый большой размер файла (а затем умножьте его на 1,1)

var maxDataSize = new BiztalkBinariesData().GetMaxFileSize();
maxDataSize = (maxDataSize != null && maxDataSize > 0)
    ? (long)(maxDataSize * 1.1)
    : 0;
var FileToProcess = new byte[maxDataSize];

Затем я делаю еще один вызов базы данных, извлекая все документы (без данных) из базы данных и помещая их в IEnumerable.

UnprocessedDocuments =
    claimDocumentData.Select(StatusCodes.CurrentStatus.WaitingToBeProcessed);
foreach (var currentDocument in UnprocessDocuments)
{
     // all of the following code goes here
}

Затем я заполняю свой массив byte [] из внешнего источника:

FileToProcess = new BiztalkBinariesData()
    .Get(currentDocument.SubmissionSetId, currentDocument.FullFileName);

Здесь вопрос. Было бы намного чище передать currentDocument (IClaimDocument) другим методам для обработки. Так что, если я установлю часть данных currentDocument в предварительно отформатированный массив, будет ли он использовать существующую ссылку? Или это создает новый массив в куче больших объектов?

currentDocument.Data = FileToProcess;

В конце цикла я бы очистил FileToProcess

Array.Clear(FileToProcess, 0, FileToProcess.length);

Это было ясно? Если нет, я постараюсь это почистить.

Ответы на вопрос(5)

Ваш ответ на вопрос