Я пытаюсь дать пользователям возможность загружать большие файлы. Прежде чем загрузить файл, я хочу разбить его на части. Каждый фрагмент должен быть объектом C#. Причина в том, что для целей ведения журнала. Это длинная история, но мне нужно создать настоящие объекты C#, представляющие каждый фрагмент файла. Несмотря на это, я пробую следующий подход:
public static List<FileChunk> GetAllForFile(byte[] fileBytes)
{
List<FileChunk> chunks = new List<FileChunk>();
if (fileBytes.Length > 0)
{
FileChunk chunk = new FileChunk();
for (int i = 0; i < (fileBytes.Length / 512); i++)
{
chunk.Number = (i + 1);
chunk.Offset = (i * 512);
chunk.Bytes = fileBytes.Skip(chunk.Offset).Take(512).ToArray();
chunks.Add(chunk);
chunk = new FileChunk();
}
}
return chunks;
}
К сожалению, этот подход кажется невероятно медленным. Кто-нибудь знает, как я могу улучшить производительность, продолжая создавать объекты для каждого фрагмента?
благодарю вас
fileBytes
). Теперь вы помещаете его в память снова, просто для того, чтобы разбить его на части. Почему? Не можете ли вы либо а) прочитать фрагмент с диска, обработать его, а затем перейти к следующему фрагменту, либо б) сделать так, чтобы фрагменты указывали на исходный массив со смещением и длиной? - person Chris Shain   schedule 09.08.2012Skip
иTake
наArray.Copy
, чтобы избежать повторятьfileBytes
на каждом шаге. - person Paolo Moretti   schedule 09.08.2012