Tag: caching

AFNetworking和离线模式下的SDURLCache不起作用

我正在使用AFNetworking和SDURLCache来处理所有的networking操作。 我有这样的SDURLCache设置: SDURLCache *urlCache = [[SDURLCache alloc] initWithMemoryCapacity:1024*1024*2 // 2MB mem cache diskCapacity:1024*1024*15 // 15MB disk cache diskPath:[SDURLCache defaultCachePath]]; [urlCache setMinCacheInterval:1]; [NSURLCache setSharedURLCache:urlCache]; 我所有的请求都使用cachePolicy NSURLRequestUseProtocolCachePolicy ,根据苹果文档,它的工作原理是这样的: 如果请求中不存在NSCachedURLResponse,则从原始源获取数据。 如果请求存在caching响应,则URL加载系统检查响应以确定是否指定内容必须重新生效。 如果内容必须重新确认,则与原始源进行连接以查看是否已经改变。 如果没有改变,则从本地caching返回响应。 如果发生了变化,则从原始源获取数据。 如果caching的响应没有指定内容必须重新生效,则检查响应中指定的最大使用期限或到期date。 如果caching的响应足够近,则从本地caching中返回响应。 如果响应被确定为陈旧,则检查起源的新数据。 如果更新的数据可用,则从源发送源获取数据,否则从caching中返回。 所以,即使在飞机模式下,只要caching没有陈旧,一切都可以正常工作。 当caching过期(max-age等)时,失败块被调用。 我一直在SDURLCache里面挖掘一点,这个方法返回一个有效数据的响应(我把数据parsing成一个string,它包含caching的信息) – (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request { request = [SDURLCache canonicalRequestForRequest:request]; NSCachedURLResponse *memoryResponse = [super cachedResponseForRequest:request]; if (memoryResponse) { […]

.Net 4 MemoryCache泄漏并发垃圾收集

我在.Net 4中使用了新的MemoryCache ,最大高速caching大小限制为MB(我testing了它在10到200MB之间,在1.75到8GB内存的系统上)。 我不会在对象上设置任何基于时间的过期,因为我只是将高速caching用作高性能驱动器,只要存在空间,我希望使用它。 令我惊讶的是,caching拒绝驱逐任何对象,以至于我会得到SystemOutOfMemoryexception 。 我启动了perfmon ,将我的应用程序连接到.Net CLR Memory\#Bytes In All Heaps , .Net Memory Cache 4.0和Process\Private Bytes – 实际上,内存消耗已经失控,没有caching修剪注册。 做了一些谷歌search和stackoverflowing ,下载和附加CLRProfiler ,和wham :到处驱逐! 内存保持在合理的范围内,根据我设定的内存大小限制。 在debugging模式下再次运行,不会驱逐。 CLRProfiler再次驱逐。 我终于注意到,探查器强制应用程序运行,没有并发垃圾收集 (也见有用的SO并发垃圾收集问题 )。 我在我的app.config中closures了它,果然,驱逐! 这似乎充其量只是一个荒谬的缺乏文档不说: 这只适用于非并发垃圾收集 – 虽然我的形象,因为它从ASP.NET移植,他们可能不必担心并发垃圾收集 。 那么有没有其他人看到这个? 我很想在那里得到一些其他的经验,也许还有一些更有教养的见解。 更新1 我已经在一个单一的方法中重现了这个问题:看起来caching必须并行写入caching驱逐不能触发(在并发垃圾收集模式下)。 如果有兴趣的话,我会把testing代码上传到公开的回购站。 我肯定正在进入CLR / GC / MemoryCache池的深层,我想我忘了我的floaties … 更新2 我在CodePlex上发布了testing代码来重现这个问题。 此外,可能有趣的是,原始生产代码作为工作者angular色在Azure中运行。 有趣的是,更改angular色的app.config中的GC并发设置没有任何作用。 可能Azure重写GC设置很像ASP.NET? 此外,在WPF和控制台应用程序下运行testing代码将产生稍微不同的驱逐结果。

Django会话

我正在查看Django中的会话,默认情况下它们存储在数据库中。 文件系统和caching会话有什么好处,我应该什么时候使用它们?

第一次播放声音时,AVAudioPlayer启动缓慢

我试图通过iPhone上的AVAudioPlayer播放(非常短 – less于2秒)的audio文件来消除启动延迟。 首先,代码: NSString *audioFile = [NSString stringWithFormat:@"%@/%@.caf", [[NSBundle mainBundle] resourcePath], @"audiofile"]; NSData *audioData = [NSData dataWithContentsOfMappedFile:audioFile]; NSError *err; AVAudioPlayer *audioPlayer = [(AVAudioPlayer*)[AVAudioPlayer alloc] initWithData:audioData error:&err]; audioPlayer.delegate = self; [audioPlayer play]; 一旦完成,我还实现了audioPlayerDidFinishPlaying方法来释放AVAudioPlayer。 我第一次播放audio时,延迟是可以触摸的 – 至less2秒。 然而,之后,声音立即播放。 我怀疑罪魁祸首是最初从闪存中读取很长一段时间的[NSData dataWithContentsOfMappedFile],但后来读取的速度很快。 不过,我不确定如何testing。 是这样吗? 如果是的话,我应该只是预先caching的NSData对象,积极清理它们在低内存条件?

使IE来caching资源,但总是重新validation

caching控制头“no-cache,must-revalidate,private”允许浏览器caching资源,但强制使用条件请求进行重新validation。 这在FF,Safari和Chrome中按预期工作。 但是,IE7 + 8不发送条件请求,即请求头中缺less“If-Modified-Since”,因此服务器使用HTTP / 200而不是HTTP / 304进行响应。 以下是完整的服务器响应头文件: Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT Content-type: text/html;charset=utf-8 Content-Length: 10835 Date: Wed, 16 Feb 2011 13:52:26 GMT Connection: keep-alive Cache-Control: no-cache, must-revalidate, private 这看起来像一个IE错误,但我没有发现任何相关的networking上,所以我想知道是否缺席或存在的另一个头使IE的行为奇怪? 关于no-cache和max-age之间差别的一个很好的讨论: Cache-Control:max-age = 0和no-cache之间有什么区别?

Firefox保持重新加载表单数据

我在Firefox的function方面遇到了一个很大的问题,那就是用户在重新加载F5时保留了数据。 如果我使用Ctrl + F5的forms被清除,这是伟大的。 我的问题是,并不是所有的用户都知道这是他们必须做的强制input清理。 有没有办法在HTML或响应头告诉Firefox不保存在表单中的数据?

有没有办法清除UIImage类使用的caching?

众所周知,使用imageNamed:方法加载图像时,UIImage会caching其图像数据。 从苹果文档: https : //developer.apple.com/documentation/uikit/uiimage/1624146-imagenamed imageNamed: 讨论 :此方法在系统caching中查找具有指定名称的图像对象,并返回该对象(如果存在)。 如果匹配的图像对象不在caching中,则此方法从指定的文件加载图像数据,将其caching ,然后返回结果对象。 因此,在用imageNamed:加载几个图像之后imageNamed:我注意到内存使用量的大量增加,并且即使在加载图像的控制器被解除分配之后内存仍被保持使用。 (至less在我分配同一个控制器的时候没有再增加) 这让我想知道是否有任何方法可以在应用程序生命周期的任何给定时间以编程方式清除UIImage使用的caching,甚至控制一些caching参数(例如,可以使用的最大内存) 我知道我可以通过使用initWithData , imageWithData , imageWithContentsOfFile或任何其他初始化工具而不是imageNamed来轻松解决此问题,但是在使用多个图像(如UITableView内部)时,需要此caching行为。 任何想法如何做到这一点? 编辑:在一些答案之后,我只是想说清楚,需要做某件事情和有可能做某事之间有巨大的差距。 正如我所指出的那样,我知道操作系统为我处理caching,我只是想看看iOS SDK所施加的限制。

什么是分布式caching?

我对分布式caching的概念感到困惑。 我有点知道谷歌search是什么。 分布式caching可能跨越多个服务器,因此它可以在规模和事务处理能力上增长。 但是,我不太了解它是如何工作的,或者它如何分配数据。 例如,假设我们有数据1,2,3,4,5,6,7,8,9,10和2caching服务器A和B. 如果我们使用分布式caching,则可能的解决scheme之一是数据1,3,5,7,9存储在caching服务器A中,并且2,4,6,8,10存储在caching服务器B中。 那么这是正确的还是我误解了? 第二个问题是我通常听到服务器节点这个词。 它是什么? 在上面的例子中,服务器A是一个服务器节点,对吗? 第三个问题,如果服务器(假设服务器A)出现故障,我们可以做些什么? 我的意思是,如果我上面的例子是正确的,我们不能从caching中获取数据1,3,5,7,9,当服务器A停机时,那么Cache Server在这种情况下可以做什么?

可以在ASP.NET应用程序外部使用HttpRuntime.Cache吗?

Scott Hanselman 说是的 。 将System.Web添加到您的非Web项目是让人们恐慌的好方法。 另一种方法是在C#应用程序中添加对Microsoft.VisualBasic的引用。 不过,两者都是合理的,也是有益的事情。 MSDN 说不 。 caching类不打算在ASP.NET应用程序之外使用。 它的devise和testing是为了在ASP.NET中使用,为Web应用程序提供caching。 在其他types的应用程序中,如控制台应用程序或Windows窗体应用程序,ASP.NETcaching可能无法正常工作。 那我该怎么想?

hibernateGrails应用程序中的第二级caching

第一部分 在Grails应用程序中,我知道您可以通过添加为每个域类启用第二级caching static mapping { cache true } 默认情况下,二级caching仅在调用get()时使用,但也可以通过将cache true添加到查询来用于条件查询和dynamic查找器。 但是,我仍然不确定我了解查询caching的工作方式。 我最好的猜测是: 每个域类都有单独的查询caching,例如一个用于Book,另一个用于Author 在执行诸如Author.findByName('bob', [cache: true])类的查询之前,计算基于域类(Author),查询(findByName)和查询参数('bob “)。 如果在作者查询caching中find该键,则返回caching的结果而不是执行查询 任何时候作者被保存,删除或更新,作者查询caching刷新 这似乎是合理的,直到我们认为返回Book实例的查询可能会join到Author表中。 在这种情况下,当“作者”被保存,删除或更新时,需要刷新“书本”和“作者”查询caching。 这使我怀疑,也许只有一个单一的查询caching,并且只要保存了任何caching的域类,它就会被清除。 第二部分 在Grails文档中提到了这一点 除了可以使用Hibernate的二级caching来caching实例外,还可以caching对象的集合(关联)。 例如: class Author { static hasMany = [books: Book] static mapping = { cache true // Author uses the 2nd level cache books cache: true // associated books use the […]