我已经将一个自定义文件提供程序注册为静态文件提供程序,但它似乎被覆盖了。我从未接到任何对IFileInfo.CreateReadStream的调用,但文件仍在提供中。问题是,我正试图为一些常见的读取文件添加内存缓存,所以我在第一次读取时在自定义文件信息类中实现了这一点。但现在看来,这似乎被IHttpSendFileFeature覆盖了。这一点并不十分清楚。IHttpSendFileFeature做了什么比基本的CreateReadStream+CopyTo更好?它本身是否实现了某种缓存?也许我根本不应该尝试在这里添加自定义缓存。我不确定文件缓存是否已经在管道中的其他地方完成了,也许会更好?我在.NET 6上使用Kestrel。
我不想每次请求都从磁盘上读取这些文件,因为我是在装有机械光盘的服务器上运行这些文件的。如果我用SSD运行这个,我想我就不必那么担心了,我的意思是,因为SSD上的读取速度已经很快了。但同时,我假设操作系统也会进行大量的文件分页/缓存?所以,也许我应该完全跳过所有自定义缓存?
尝试删除以下
app.UseStaticFiles();
它调用
app.UseMiddleware<StaticFileMiddleware>();
如果删除UseStaticFiles()
并调用
app.UseMiddleware<MyStaticFileMiddleware>();
不应再调用原始StaticFileMiddleware
。
我对你的帖子有点不清楚。你是如何提供这些文件的?您描述的服务/功能未在默认服务集合中注册。