Visual studio 使用RavenDB的项目构建非常缓慢。我做错什么了吗?

Visual studio 使用RavenDB的项目构建非常缓慢。我做错什么了吗?,visual-studio,visual-studio-2010,ravendb,Visual Studio,Visual Studio 2010,Ravendb,我正在开发一个新的开源CMS,它内置于asp.NETMVC4中。这是一个个人项目,主要是为了提高我的技能,还试图学习RavenDB。我最初开始使用EF Code first和Sql compact edition构建它。然后,我开始学习RavenDB,所以我立即投入其中,并一直在为RavenDB修改数据存储。然而,我注意到,随着我越来越多地投入其中,我的解决方案和项目在VisualStudio中构建的时间越来越长,在最初的网站启动时运行的时间也越来越长。使用EF和sqlce时并非如此。我知道在应

我正在开发一个新的开源CMS,它内置于asp.NETMVC4中。这是一个个人项目,主要是为了提高我的技能,还试图学习RavenDB。我最初开始使用EF Code first和Sql compact edition构建它。然后,我开始学习RavenDB,所以我立即投入其中,并一直在为RavenDB修改数据存储。然而,我注意到,随着我越来越多地投入其中,我的解决方案和项目在VisualStudio中构建的时间越来越长,在最初的网站启动时运行的时间也越来越长。使用EF和sqlce时并非如此。我知道在应用程序开始加载新文档存储并创建索引时会受到很大影响,但随着我添加更多索引,这似乎需要越来越长的时间,我不明白这将如何降低解决方案文件的实际构建速度。我在想也许我做错了什么。我正在使用asp.NETMVC4和RavendbBuild700

我想知道这是否与我的索引有关,因为它始于我开始向我的项目添加索引时。可能是我创建的错误或编码错误???下面是我创建索引时的代码,以及几个索引示例

// Register RavenDB Indexes
IndexCreation.CreateIndexes(typeof(Posts_BySlug).Assembly, Store);
IndexCreation.CreateIndexes(typeof(Posts_ByCategorySlug).Assembly, Store);
IndexCreation.CreateIndexes(typeof(Categories_BySlug).Assembly, Store);
IndexCreation.CreateIndexes(typeof(PostTypes_BySlug).Assembly, Store);
IndexCreation.CreateIndexes(typeof(Accounts_ByEmail).Assembly, Store);
IndexCreation.CreateIndexes(typeof(Settings_ByName).Assembly, Store);
IndexCreation.CreateIndexes(typeof(Posts_ByParentID).Assembly, Store);
这里是我的几个索引。我现在只有一个Map/Reduce,其余的只使用Maps

public class Posts_ByParentID : AbstractIndexCreationTask<Post>
{
    public Posts_ByParentID()
    {
        Map = posts => from post in posts
                       select new { ParentID = post.ParentID, Status = post.Status };
    }
}


public class PostTypes_BySlug : AbstractIndexCreationTask<PostType>
{
    public PostTypes_BySlug()
    {
        Map = postTypes => from postType in postTypes
                           select new { Slug = postType.Slug };
    }
}
public类Posts\u ByParentID:AbstractIndexCreationTask
{
公共Posts_ByParentID()
{
Map=posts=>from post in posts
选择新的{ParentID=post.ParentID,Status=post.Status};
}
}
公共类PostTypes\u BySlug:AbstractIndexCreationTask
{
公共PostType_BySlug()
{
Map=postTypes=>来自postTypes中的postType
选择new{Slug=postType.Slug};
}
}
就你所见,相当基本的索引。到目前为止我只有9个。在项目加载之后,我在任何地方运行,主要是每个请求运行一个查询,在后端运行1-3个查询。总响应时间都小于1秒。只是初始应用程序启动最多需要45秒,解决方案构建时间最多需要45秒,而使用EF时,这一时间通常为5秒。我只是不想让事情变得更糟。我还注意到,如果我的站点空闲5-10分钟,那么当我请求一个新页面时,需要另外30-45秒才能响应。有什么想法吗


抱歉发了这么长的邮件。非常感谢您的帮助。

将部分答案移出评论线程。仍然不确定构建时间,但在索引创建方面

只需调用一次CreateIndexes()。您向它传递一个对整个程序集的引用,它将扫描程序集中包含的所有索引并创建它们。

您发布的代码将创建每个索引7次。

您的所有索引都在单独的程序集中吗?如果不是,那么您只需要其中一个CreateIndexes调用,它将搜索传入程序集中定义的所有索引并全部创建。不,它们都在同一程序集和命名空间中。这是有道理的,因为我确实注意到在运行命令行服务器和查看ravendb日志时,我可以看到索引被创建了好几次,但我不知道它是这样工作的。谢谢,我将进行额外的调用。下一个问题是,您是否有任何自定义的构建步骤,如razor编译,或在构建上运行单元测试?除了一个索引创建调用之外,我已注释掉所有调用,现在应用程序的启动速度要快得多。谢谢你!我仍然有很长的解决方案构建时间。我注意到只有当我选择“重建解决方案”时,而不是当我只选择“构建解决方案”时。我最近刚开始使用Build,但过去我总是进行重建。我可能从来没有真正需要过。不,没有razor或view编译,也没有运行单元测试。我没有设置任何类型的构建脚本。我从基本MVC4Web应用程序解决方案开始,没有进行单元测试,也没有在构建过程中添加任何附加内容。如果我只是做一个构建,它真的很快。我想从现在起,在开发过程中我将不再使用rebuild。是的,在再次查看日志之后,这正是它所做的。我把它改为只打第一个电话,而且加载速度更快。就像我提到的,我现在只使用“构建”而不是重建,而且速度非常快。看来我的问题现在已经解决了。谢谢你的帮助!!