我在我的一个项目中遇到过这段代码,它有一个静态函数从文件中返回一个MemoryStream,然后存储在Cache中。现在,同一个类有一个构造函数,它允许将MemoryStream存储在一个私有变量中,然后再使用它。所以它看起来像这样:
private MemoryStream memoryStream;
public CountryLookup(MemoryStream ms)
{
memoryStream = ms;
}
public static MemoryStream FileToMemory(string filePath)
{
MemoryStream memoryStream = new MemoryStream();
ReadFileToMemoryStream(filePath, memoryStream);
return memoryStream;
}
用法:
Context.Cache.Insert("test",
CountryLookup.FileToMemory(
ConfigurationSettings.AppSettings["test"]),
new CacheDependency(someFileName)
);
然后:
CountryLookup cl = new CountryLookup(
((MemoryStream)Context.Cache.Get("test"))
);
所以我想知道谁应该处理memoryStream以及什么时候?理想情况下,CountryLookup应该实现IDisposable。
我应该关心它吗?
答案 0 :(得分:7)
它有点丑陋 - 尤其是MemoryStream
是有状态的,因为它具有“当前位置”的概念。
为什么不直接存储字节数组?您可以轻松地构建多个MemoryStream,它们可以在需要时包装相同的字节数组,并且您不必担心有状态。
MemoryStreams通常不会需要处理,但我个人倾向于将它们排除在习惯之外。如果您对它们执行异步操作或在远程处理中使用它们,我相信处理 会在那时产生影响。字节数组更简单:)