2013-08-08 4 views
2

Я работаю с приложением wpf, и метод записи потока памяти используется в том, что для записи данных dicom data bytes.It показывает Исключение типа System.OutOfMemoryException при попытке написать большие данные dicom размером более 70 мб. Можете ли вы предложить любое решение для решения этой проблемы.Выброшено исключение типа «System.OutOfMemoryException». C# при использовании потока памяти

Кусок кода, как этот

try 
      { 
       using (MemoryStream imagememoryStream = new MemoryStream()) 
       { 
        while (true) 
        { 
         // Retrieve the DICOMData. 
         // data comes as chunks; if file size is larger, multiple RetrieveDICOMData() calls 
         // has to be raised. the return value specifies whether the chunk is last one or not.     
         dicomData = dicomService.RetrieveDICOMData(hierarchyInfo); 
         imagememoryStream.Write(dicomData.DataBytes, 0, dicomData.DataBytes.Length); 
         if (dicomData.IsLastChunk) 
         { 
          // data is smaller; completed reading so, end 
          break; 
         } 
        } 
        imageData=imagememoryStream.ToArray(); 
       } 
       return imageData; 
      } 
      catch(Exception exception) 
      { 
       throw new DataException(exception.StackTrace); 
      } 
+3

Не можете ли вы записать эти данные в кусках? Почему он должен быть таким большим? –

+0

Можете ли вы разместить свой код? –

+0

* Я говорю, сэр, похоже, что ваш процесс ... из памяти. Совершенно своеобразно! * Сказал ни один программист, который понимал, насколько адресное пространство доступно для 32-битного процесса. –

ответ

1

Это весьма характерно для MemoryStream бросить OutOfMemoryExceptions из-за отсутствия непрерывной (не общей) доступной памяти. Существует ряд альтернативных реализаций, которые уменьшают эту проблему. Посмотрите, например, на MemoryTributary.

Или, в зависимости от ваших потребностей, вы можете попробовать написать прямо в хранилище вместо памяти.

+0

Спасибо, я попробую и скоро вернусь – mottukutty

+0

Он работает отлично. Большое спасибо за ваше ценное предложение. Но у меня есть проект зависимости в управляемом cpp, он показывает исключение «Недостаточно памяти для обработки этой команды». Можете ли вы предложить какое-либо решение. – mottukutty

Смежные вопросы