[英]Why is Container.Configure taking so long?
今天,我正在研究系統的運行緩慢。 通過插入一些調試日志,我將其范圍縮小到以下部分:
var db = MyDbContext.ForShard(shardKey);
_logger.Debug("Point 1");
container.Configure(cfg =>
{
_logger.Debug("Anon 1");
cfg.For<MyDbContext>().Use(db);
_logger.Debug("Anon 2");
});
_logger.Debug("Point 2");
數據庫是分片的,而shardKey
標識要使用的分片。 對MyDbContext.ForShard()
的調用返回一個數據庫連接,該數據庫的連接字符串引用正確的分片。 然后,有問題的代碼片段告訴StructureMap Container
使用此實例進行依賴項注入。
在日志中,除了“ Anon 2”和“ Point 2”之間的間隔(可能需要一秒鍾的時間)之外,每行之間的時滯可以忽略不計。 不好。 但是我從未見過StructureMap需要這么長時間來配置用法。
我在這里做錯什么了嗎?
正如來自StructureMap的好人們在其GitHub頁面上回答的那樣:
@CoreyKaylor說:configure調用不應在運行時發生,而應該僅在啟動時發生,因此,例如,如果每個Web請求都發生該調用,那么它將非常慢,因為configure調用需要全局鎖定。 如果您絕對需要運行時重寫,那么更好的選擇是將嵌套容器用於http請求的范圍,並將TypeArguments傳遞給嵌套容器。 所有這些都假設您也正在運行最新版本的StructureMap。
就我而言,這意味着:
var db = MyDbContext.ForShard(shardKey);
var typeArgs = new TypeArguments();
typeArgs[typeof(MyDbContext)] = db;
var nested = container.GetNestedContainer(typeArgs);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.