2013-02-12 26 views
2

我想通过一个MVC4 Web应用程序使用GridFS将存储在MongoDB中的图像通过我的LAN环境发送到浏览器,但是直到图像发送到浏览器需要大约500ms的时间。为什么通过MVC4从GridFS发送文件需要很多时间?

Google Chrome网络检查员说大部分时间都是在“等待”期间花费的,而实际的“接收”需要大约1ms。

MongoDB服务器在本地网络中,那么发送10kb图像需要多长时间?我使用Windows 8和Visual Studio 2012以及通过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) })"/> 
+0

您的收藏中有多少条记录?另外,你有没有尝试在shell中运行'explain'?也许你错过了一个索引或其他东西。 – 2013-02-12 22:17:47

+0

目前只有约10条测试记录 – NKnusperer 2013-02-12 22:19:22

+0

如何在查询中运行'explain'?或者检查你的网络服务器和你的mongodb服务器之间的延迟? – 2013-02-12 23:14:14

回答

0

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

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

我不知道,当你实例化这些多少开销招致的,但它不会伤害到它移到你想优化方法之外。

相关问题