簡體   English   中英

為什么Container.Configure需要這么長時間?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM