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);
Это было ясно? Если нет, я постараюсь это почистить.