Mongodb 为什么通过MVC4从GridFS发送文件要花这么多时间?

Mongodb 为什么通过MVC4从GridFS发送文件要花这么多时间?,mongodb,asp.net-mvc-4,mongodb-.net-driver,iis-8,gridfs,Mongodb,Asp.net Mvc 4,Mongodb .net Driver,Iis 8,Gridfs,我想通过MVC4 Web应用程序将使用GridFS存储在MongoDB中的图像通过我的LAN环境发送到浏览器,但图像发送到浏览器需要约500毫秒的时间 谷歌Chrome网络检查员表示,大部分时间都花在“等待”上,而实际的“接收”时间约为1毫秒 MongoDB服务器位于本地网络中,那么发送10kb映像需要多长时间呢?我使用Windows8和VisualStudio2012,并通过NuGet使用官方的mongo csharp驱动程序 这是我的“文件”控制器的代码,它接受对象id并发送该id的数据:

我想通过MVC4 Web应用程序将使用GridFS存储在MongoDB中的图像通过我的LAN环境发送到浏览器,但图像发送到浏览器需要约500毫秒的时间

谷歌Chrome网络检查员表示,大部分时间都花在“等待”上,而实际的“接收”时间约为1毫秒

MongoDB服务器位于本地网络中,那么发送10kb映像需要多长时间呢?我使用Windows8和VisualStudio2012,并通过NuGet使用官方的mongo csharp驱动程序

这是我的“文件”控制器的代码,它接受对象id并发送该id的数据:

public FileContentResult Files(string id)
{
    var database = new MongoClient(MyConnection).GetServer().GetDatabase("MyDB");
    var gridFs = new MongoGridFS(database);
    var bsonId = new BsonObjectId(id);
    var gridInfo = gridFs.FindOneById(bsonId);
    var bytes = GridInfoToArray(gridInfo);
    return new FileContentResult(bytes, "image/jpeg") { FileDownloadName = gridInfo.Name };
}

private byte[] GridInfoToArray(MongoGridFSFileInfo file)
{
    using (var stream = file.OpenRead())
    {
        var bytes = new byte[stream.Length];
        stream.Read(bytes, 0, (int)stream.Length);
        return bytes;
    }
}
在视图中显示图像的代码:

<img src="@Url.Action("Files", new { id = objectIdOfMyImage) })"/>

如果缓存数据库和MongoGridFS实例,结果会有多大不同

// create static fields for _database & _gridFs
var database = _database ?? 
    (_database = new MongoClient(MyConnection).GetServer().GetDatabase("MyDB"));
var gridFs = _gridFs ?? 
    (_gridFs = new MongoGridFS(database));

我不确定在实例化这些时会产生多少开销,但将其移到您试图优化的方法之外不会有什么坏处。

您的集合中有多少记录?另外,您是否尝试过从shell在上运行
explain
?可能您缺少索引或其他内容。目前只有约10条记录可供测试对您的查询运行
explain
如何?或者检查web服务器和mongodb服务器之间的延迟?以下是在
gridFs.Find(Query.EQ(“\u id”,bsonId))
结果上调用
Explain()
时的输出: