在Cache中存储MemoryStream

时间:2009-10-20 06:01:43

标签: c# idisposable

我在我的一个项目中遇到过这段代码,它有一个静态函数从文件中返回一个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。

我应该关心它吗?

1 个答案:

答案 0 :(得分:7)

它有点丑陋 - 尤其是MemoryStream是有状态的,因为它具有“当前位置”的概念。

为什么不直接存储字节数组?您可以轻松地构建多个MemoryStream,它们可以在需要时包装相同的字节数组,并且您不必担心有状态。

MemoryStreams通常不会需要处理,但我个人倾向于将它们排除在习惯之外。如果您对它们执行异步操作或在远程处理中使用它们,我相信处理 会在那时产生影响。字节数组更简单:)