byte [] y pasando eficientemente por referencia

Así que esto está relacionado con el manejo del montón de objetos grandes y tratar de minimizar la cantidad de veces que instancia un byte []. Básicamente, estoy teniendo OutOfMemoryExceptions y siento que es porque estamos creando instancias de demasiados conjuntos de bytes. El programa funciona bien cuando procesamos un par de archivos, pero necesita escalar, y actualmente no puede.

En pocas palabras, tengo un bucle que extrae documentos de una base de datos. Actualmente, está extrayendo un documento a la vez y luego procesando el documento. Los documentos pueden variar desde menos de un meg a más de 400 megas. (Por eso estoy procesando uno a la vez). El siguiente es un pseudocódigo y antes de que lo optimice.

Así que los pasos que estoy haciendo son:

Haga una llamada a la base de datos para encontrar el tamaño de archivo más grande (y luego multiplíquelo por 1.1)

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

Luego hago otra llamada a la base de datos sacando todos los documentos (sin datos) de la base de datos y los coloco en un IEnumerable.

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

Luego lleno mi matriz de bytes [] desde una fuente externa:

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

Aquí está la pregunta. Sería mucho más limpio pasar el documento actual (IClaimDocument) a otros métodos para procesar. Entonces, si configuro la parte de datos del documento actual en la matriz preformateada, ¿utilizará esto la referencia existente? ¿O esto crea una nueva matriz en el montón de objetos grandes?

currentDocument.Data = FileToProcess;

Al final del ciclo, borraría FileToProcess

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

¿Estaba claro? Si no, trataré de limpiarlo.

Respuestas a la pregunta(10)

Su respuesta a la pregunta