我试图将Razor视图引擎用作由数据库支持的通用模板引擎.
http://razorengine.codeplex.com/问题是,对于每个模板编译,都会创建并加载新的动态程序集.由于无法从当前appdomain卸载程序集,并且无法为模板系统使用单独的appdomain(使用匿名类型),因此这些程序集将不断累积,直到appdomain被销毁.模板本身将定期更改,因此将导致更多的重新编译.
问题是这些动态集合(可能有数千个)会损害appdomain性能吗?或者更方便的是有更好的方法吗?
我在 asp.net 中使用 Autofac 2.5 并且我遇到了一个问题,即生命周期范围组件被解析为单实例组件的依赖项,从而破坏了我的线程安全。这是注册问题,但我认为 Autofac 认为这是违规行为,会引发异常。
private class A{}
private class B
{
public B(A a){}
}
[Test]
[ExpectedException()]
public void SingleInstanceCannotResolveLifetimeDependency()
{
var builder = new ContainerBuilder();
builder.RegisterType<A>()
.InstancePerLifetimeScope();
builder.RegisterType<B>()
.SingleInstance();
using (var container = builder.Build())
{
using (var lifetime = container.BeginLifetimeScope())
{
//should throw an exception
//because B is scoped singleton but A is only scoped for the lifetime
var b = lifetime.Resolve<B>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果发生这种情况,有没有办法让 Autofac 抛出依赖项解析异常?
更新 即使这是 Autofac 的正确行为 - SingleInstance 只是 …
WITH Categories (child_oid, Level) AS (
SELECT h.child_oid,
0 AS Level
FROM Memx_productcatalog.dbo.ME_CatalogHierarchy AS h
JOIN dbo.[ME_CatalogProducts] c on h.oid = c.oid
WHERE c.CategoryName = 'Root'
UNION ALL
SELECT h.child_oid,
Level + 1
FROM dbo.ME_CatalogHierarchy AS h
JOIN Categories AS p ON p.child_oid = h.oid ) --End CTE Recursive
SELECT p.oid --problem here
FROM dbo.ME_CatalogProducts as p
WHERE p.oid IN (SELECT child_oid
FROM Categories)
Run Code Online (Sandbox Code Playgroud)
我正在编写一个递归 CTE SQL 语句来从树中提取项目。查询工作正常。当我选择特定列时,查询将在大约 300 毫秒内执行。但是,当我使用select *or时p.*,查询执行时间不到 100 毫秒。这与我的预期完全相反。我检查了索引、统计信息,两个查询似乎生成了相同的执行计划。我被这个难住了。
更新
我一整天都在运行这个查询,结果一致。我尝试使用选项(重新编译)来禁用缓存。我刚刚在 sql …