在Cache中存储MemoryStream

Ego*_*hin 1 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;
}
Run Code Online (Sandbox Code Playgroud)

用法:

Context.Cache.Insert("test",
                CountryLookup.FileToMemory(
                    ConfigurationSettings.AppSettings["test"]),
                new CacheDependency(someFileName)
                );
Run Code Online (Sandbox Code Playgroud)

然后:

CountryLookup cl = new CountryLookup(
                ((MemoryStream)Context.Cache.Get("test"))
                );
Run Code Online (Sandbox Code Playgroud)

所以我想知道谁应该处理memoryStream以及什么时候?理想情况下,CountryLookup应该实现IDisposable.

我应该关心它吗?

Jon*_*eet 7

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

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

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

  • +1,将`byte []`数组存储在缓存中 - "MemoryStream"的实例成员不保证是线程安全的. (2认同)