MemoryStream的一些问题

MemoryStream默认大小是4096,如果最后一次不到4096的时候,再写的一次的话,会造成写的超过4096的字符丢失。

奇怪的问题,不知道有啥办法解决。

 

现在只能用Path.GetTempFileName(),开临时文件FileStream来解决

转载于:https://www.cnblogs.com/peteryu007/archive/2008/10/17/1313459.html

在 C# 中,`MemoryStream` 类是一个不可变的内存流,这意味着一旦数据被写入,就不能修改或删除。然而,如果你想释放其占用的内存资源,可以不再引用它,因为 `MemoryStream` 会在垃圾回收机制下次运行时自动释放。不过,如果你需要明确地将其内容设为空,通常不会直接提供一个方法去“清空”已存在的数据。 你可以选择以下两种方式: 1. **重置(Reset)**:通过调用 `Seek(0)` 将流的位置重置到开始,然后使用 `SetLength(0)` 设置长度为零,但这并不会改变原始数据,只是改变了读取位置。这适用于你知道之前的数据大小的情况。 ```csharp using (var ms = new MemoryStream()) { // 写入数据... ms.Seek(0, SeekOrigin.Begin); // 重置位置 ms.SetLength(0); // 设定长度为0 } ``` 2. **关闭并丢弃(Dispose and Disposing)**:当你完成对 `MemoryStream` 的使用后,应该调用 `Close()` 或者使用 `using` 块自动管理资源,这样当它从作用域中移除时会被自动关闭,内存也会被释放。 ```csharp using (var ms = new MemoryStream()) { // 写入数据... } // 在此处,ms 已经被关闭并可能被垃圾收集器回收 ``` 请注意,由于 `MemoryStream` 的特性,不需要显式地“清空”它,除非你想节省内存空间或有其他特殊需求。如果你真的想清除所有数据并保留空的实例,可能需要考虑创建一个新的 `MemoryStream` 实例替换当前的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值