Почему свойство MemoryStream Position изменяется с SetLength и становится неизменным? - PullRequest
1 голос
/ 05 мая 2011

Проблемы с использованием класса System.IO.MemoryStream.

После создания, вот так:

var memory = new MemoryStream();

затем устанавливает длину в несколько байтов для записи в него.

var length = 181;
memory.SetLength( length);

Затем в отладчике память показывает длину и Положение ОБА установлено на 181. В отдельной просто тестовой программе Это свойство показывает положение по-прежнему на нуле после SetLength().

Кроме того, если я изменю свойство Position на 0, используя отладчик или добавив строку кода, он игнорирует и все еще показывает 181 как свойство позиции. Таким образом это ведет себя как неизменный.

Однако, опять же, в простом модульном тесте, это работает как ожидалось.

Сначала это было проблемой с если MemoryStream не является потокобезопасным. Но в отладчике Я заморозил все остальные темы перед вызовом любого из этого кода. И все равно не получается, как указано выше.

Ну, это самое странное. Есть идеи что попробовать?

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Я не вижу того же, что и вы. Если я создаю консольное приложение со следующим кодом в Main:

        var x = new MemoryStream();
        x.SetLength(181);

.. и проследив за вызовом SetLength, отладчик показывает Length, равный 181, и Position, равный 0. Вы должны иметь что-то еще, влияющее на ваш объект потока.

0 голосов
/ 05 мая 2011

Собственно, разобрался с проблемой. Первая подсказка заключалась в том, что это произошло только в отладчике.

Причина в том, что метод ToString () был переопределен.

Он считывал память и отображал ее в отладчике. Это было чтение из памяти и, следовательно, изменение позиции.

Проблема решена.

Спасибо.

...