Потоковое повторное использование в C#

function isset(key){
ret = false;
array_example.forEach(function(entry) {
  if( entry == key ){
    ret = true;
  }
});
return ret;
}

alert( isset("key_search") );
8
задан Allen Rice 23 April 2010 в 03:48
поделиться

3 ответа

Использование вспомогательного метода для управления потоковой передачей:

static public void StreamCopy(Stream source, Stream target)
{
    byte[] buffer = new byte[8 * 1024];

    int size;
    do
    {
      size = source.Read(buffer, 0, 8 * 1024);
      target.Write(buffer, 0, size);
    } while (size > 0);
}

Вы можете легко комбинировать все, что вам нужно:

using (FileStream iFile = new FileStream(...))
using (FileStream oFile = new FileStream(...))
using (DeflateStream oZip = new DeflateStream(outFile, CompressionMode.Compress))
    StreamCopy(iFile, oZip);

В зависимости от того, что вы на самом деле пытаетесь сделать, вы ' d по-другому объединить потоки. При этом также используется относительно небольшой объем памяти, поскольку в памяти находятся только обрабатываемые данные.

4
ответ дан 5 December 2019 в 23:17
поделиться

StreamReader / StreamWriter не должны были быть предназначены для закрытия основного потока - это ужасная ошибка в BCL. Но они есть, они не будут изменены (из-за обратной совместимости), поэтому мы застряли в этой катастрофе API.

Но есть некоторые хорошо известные обходные пути, если вы хотите использовать StreamReader / Writer, но Впоследствии оставьте Stream открытым.

  • Для StreamReader: не удаляйте StreamReader. Это так просто. Безвредно просто позволить StreamReader уйти, даже не вызывая Dispose. Единственный эффект состоит в том, что ваш Stream не будет преждевременно закрыт, что на самом деле является плюсом.
  • Для StreamWriter: могут быть буферизованные данные, поэтому вы не можете просто отпустить их. Вы должны позвонить Флашу, чтобы обеспечить запись буферизованных данных в Stream. Затем вы можете просто отпустить StreamWriter. (По сути, вы помещаете Flush туда, где обычно размещаете Dispose.)
1
ответ дан 5 December 2019 в 23:17
поделиться

Если вы не читаете потоками, размер которых превышает размер жесткого диска, я не думаю, что вам не хватит памяти:

http://blogs.msdn.com/ericlippert /archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx

0
ответ дан 5 December 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: