【问题标题】:Storing MemoryStream in Cache将 MemoryStream 存储在缓存中
【发布时间】:2009-10-20 14:12:27
【问题描述】:

我在我的一个项目中遇到过这段代码,它有一个静态函数可以从文件中返回一个 MemoryStream,然后将其存储在缓存中。现在同一个类有一个构造函数,它允许将 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。

我应该关心它吗?

【问题讨论】:

    标签: c# idisposable


    【解决方案1】:

    有点难看 - 特别是 MemoryStream 是有状态的,因为它具有“当前位置”的概念。

    为什么不直接存储一个字节数组呢?您可以在需要时轻松构建多个封装相同字节数组的 MemoryStream,并且无需担心状态。

    MemoryStreams通常不需要丢弃,但我个人倾向于出于习惯丢弃它们。如果您对它们执行异步操作或在远程处理中使用它们,我相信处置确实会在这一点上有所作为。字节数组更简单:)

    【讨论】:

    • +1,将byte[] 数组存储在缓存中 - MemoryStream 的实例成员不保证是线程安全的。
    猜你喜欢
    • 1970-01-01
    • 2012-09-23
    • 2013-02-06
    • 2012-01-16
    • 1970-01-01
    • 2016-11-13
    • 2014-03-24
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多