Resharper给了我这个:
new MyObject {Prop1 = prop1, Prop2 = prop2}
Run Code Online (Sandbox Code Playgroud)
但我想要:
new MyObject { Prop1 = prop1, Prop2 = prop2 }
Run Code Online (Sandbox Code Playgroud)
目前它正在破坏我的StyleCop规则.
我在重构的遗留系统中有以下SQL语句.对于这个问题,这是一个简略的视图,暂时只返回count(*).
SELECT COUNT(*)
FROM Table1
INNER JOIN Table2
INNER JOIN Table3 ON Table2.Key = Table3.Key AND Table2.Key2 = Table3.Key2
ON Table1.DifferentKey = Table3.DifferentKey
Run Code Online (Sandbox Code Playgroud)
它产生了大量的记录并杀死了系统,但有人可以解释一下语法吗?这可以用其他任何方式表达吗?
编辑:
建议重新格式化
SELECT COUNT(*)
FROM Table1
INNER JOIN Table3
ON Table1.DifferentKey = Table3.DifferentKey
INNER JOIN Table2
ON Table2.Key = Table3.Key AND Table2.Key2 = Table3.Key2
Run Code Online (Sandbox Code Playgroud) 我有以下查询,它做的很少,并且是我在整个系统中进行的连接类型的示例.
select t1.PrimaryKeyId, t1.AdditionalColumnId
from TableOne t1
join TableTwo t2 on t1.ForeignKeyId = t2.PrimaryKeyId
join TableThree t3 on t1.PrimaryKeyId = t3.ForeignKeyId
join TableFour t4 on t3.ForeignKeyId = t4.PrimaryKeyId
join TableFive t5 on t4.ForeignKeyId = t5.PrimaryKeyId
where
t1.StatusId = 1
and t5.TypeId = 68
Run Code Online (Sandbox Code Playgroud)
所有连接列都有索引,但性能不是很好.检查查询计划时会发现很多哈希匹配(内部联接),当我真的想要看到嵌套循环连接时.
每个表中的记录数如下:
select count(*) from TableOne
Run Code Online (Sandbox Code Playgroud)
= 64393
select count(*) from TableTwo
Run Code Online (Sandbox Code Playgroud)
= 87245
select count(*) from TableThree
Run Code Online (Sandbox Code Playgroud)
= 97141
select count(*) from TableFour
Run Code Online (Sandbox Code Playgroud)
= 116480
select count(*) from TableFive
Run Code Online (Sandbox Code Playgroud)
= 62
提高此类查询性能的最佳方法是什么?
我需要获取当前正在执行的批处理文件的文件夹名称.我一直在尝试使用以下语法循环当前目录(目前这是错误的):
set mydir = %~p0
for /F "delims=\" %i IN (%mydir%) DO @echo %i
Run Code Online (Sandbox Code Playgroud)
几个问题我似乎无法将'mydir'变量值作为搜索字符串传递.如果我传入命令,它似乎只能起作用; 我的语法错误,无法解决原因.
我的想法是使用'\'分隔符循环文件夹字符串,但这也会导致问题.如果我在每个循环上设置一个变量,那么最后一个值集将是当前文件夹名称.例如,给定以下路径:
C:\ Folder1中\文件夹2\Folder3\Archive.bat
我希望解析出'Folder3'的值.
我需要解析该值,因为它的名称将是我将在批处理文件中进一步创建的另一个文件夹的一部分.
非常感谢有人可以提供帮助.我可能会完全咆哮错误的树,所以任何其他方法也会受到极大的欢迎.
我看过很多懒加载的例子 - 你有什么选择?
给定一个模型类,例如:
public class Person
{
private IList<Child> _children;
public IList<Child> Children
{
get {
if (_children == null)
LoadChildren();
return _children;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Person类不应该知道它是如何被装载的......或者它应该是什么?当然它应该控制何时填充属性?
您是否有一个将Person与其子集合耦合在一起的存储库,或者您是否会使用不同的方法,例如使用lazyload类 - 即便如此,我也不希望在我的模型体系结构中使用lazyload类模糊.
如果首先请求一个Person然后它的子节点(即在这个例子中不是延迟加载)或者以某种方式延迟加载,你将如何处理性能.
这一切都归结为个人选择吗?
使用Ninject,您如何配置内核,以便我可以定义哪些构造函数值传递到对象的实例化?
我在模块中配置了以下内容:
Bind<IService1>()
.To<Service1Impl>()
.InSingletonScope()
.Named("LIVE");
Bind<IService2>()
.To<Service2Impl>()
.InSingletonScope()
.Named("LIVE")
.WithConstructorArgument(
"service1",
Kernel.Get<IService1>("LIVE"));
Run Code Online (Sandbox Code Playgroud)
Service2Impl接受IService1的构造函数参数,但我希望它来自容器.我也想要命名绑定,因为我的代码将在运行时针对不同的版本.
这似乎有效,但它是实现我想做的正确方法吗?我是否应该在不使用命名绑定的情况下实现并将不同的配置模块连接到内核中?
编辑
我现在使用ToMethod()方法指定一个委托,以根据特定类型的请求进行调用.这似乎有点好,因为如果构造函数配置错误而不是必须知道我首先传递的参数的名称,我将得到编译时警告.
谢谢
我一直在尝试在IIS 6上设置我的Beta 1 MVC应用程序,但无法正常运行.我已按照其他博客文章中的建议添加了.net isapi DLL的通配符映射,但在访问网站的根目录时出现以下错误:
The incoming request does not match any route.
..
[HttpException (0x80004005): The incoming request does not match any route.]
System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContextBase httpContext) +147
System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext) +36
System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +4
HCD.Intranet.Web.Default.Page_Load(Object sender, EventArgs e) +81
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436
Run Code Online (Sandbox Code Playgroud)
我正在使用MVC模板应用程序中提供的Default.aspx页面,该页面正确地重写对网站根目录的访问.
public partial class Default : Page
{
public void Page_Load(object sender, System.EventArgs e)
{
HttpContext.Current.RewritePath(Request.ApplicationPath);
IHttpHandler …Run Code Online (Sandbox Code Playgroud) 我有一个包含三个构建配置的项目:
构建配置2和3通过快照依赖于1.
有3个VCS根:
默认的分支和分支规范如下:
Git - 全部
默认分支:
开发
分支规格:
+:refs/heads /(develop)
+:refs/heads /(master)
+:refs/heads /(feature/)
+:refs/heads /(hotfix /)
+:refs/heads /(release)
+:refs /头/(支持/*)
Git - 开发
默认分支:
开发
分支规格:
+:参考文献/头/(显影)
Git - 大师
默认分支:
主
分支规格:
+:参考文献/头/(主)
这是问题......
当我为第三个构建配置运行构建时,我希望依赖项检查主分支上的集成构建.它没有做,并将始终使用集成构建配置的默认分支(当前开发).
有没有办法实现我想要的?
我过去的方式是在单个构建配置中使用多个CVS端点,这似乎也是错误的,如果可能的话我想避免这种情况.
我一直在做一些关于动作过滤器的研究,并想知道是否有办法以编程方式将它们添加到控制器?
为了给出一些上下文,我想在web.config中配置日志记录时添加日志记录过滤器,否则我不希望过滤器存在于每个操作方法的执行链中.
我很欣赏我可以检查实际的过滤器代码本身,看看是否已启用日志记录,但不希望必须这样做.
非常感谢!
I have been using the new MVC framework with StructureMap recently and have had good results overall, however, I keep running into a very strange error that I cannot understand or work out how to resolve.
This is my architecture:
I therefore have:
public class Repo : IRepository
{
public Repo(DBContext db)
{
.....
}
}
public …Run Code Online (Sandbox Code Playgroud) 我们使用Sitecore 6.4并使用共享源高级搜索模块,并且当Sitecore重新索引过程启动并更新对Web数据库的更改时,网站搜索性能会大幅降低.
当我们启动完整站点发布时,索引管理器会获取更改并处理历史记录,而历史记录又会重新索引受影响的每个项目.当每个项目发生这种情况时,您可以看到磁盘更改时的Lucene索引,同时查看目录(文件数量增长并在您观看时更改).
如果您在发生这种情况时尝试在公共网站上进行搜索,则搜索可能需要更长的时间才能完成; 在重载下,重新索引过程完成之前可能需要15秒的时间.
我可以看到这个过程由IndexingProvider类控制.有没有办法覆盖这个类并实现我们自己的?
我们查看了搜索逻辑,可以看到每次请求搜索时都会创建一个IndexSearchContext对象,从而创建一个新的IndexSearcher.我们更改了一些逻辑,以便将IndexSearchContext保存为单元,这当然意味着同一个Lucene IndexSearcher可以提供多个请求.这大大减少了内存消耗,因为建议使用相同的搜索器来提高性能.
但是,在执行此操作时,在创建新的IndexSearcher之前,不会获取对索引的更改.我们需要一种方法来通知我们的代码索引过程已经完成,然后我们可以重置我们的单例IndexSearchContext对象.我们如何将此逻辑集成到Sitecore配置的代码中?
手动重建索引时,只需大约5秒钟即可完成.显然,这有效地删除了索引,然后再次创建它,但为什么逐项更新需要这么长时间?有没有更好的方法可以实现更新过程而不逐项,而且不会影响公共网站?
我原本以为其他人会受到这个问题的影响,所以我很想知道人们如何解决这个问题.
编辑 - Sitecore论坛的其他信息
Sitecore.Search代码似乎大量使用为单个操作创建/处置新的Lucene对象.对于大型环境来说,它似乎不太可扩展,这就是我看到代码时感到惊讶的原因.特别是如果索引很大并且每天都有很多内容更新/发布.
通过dotPeek查看类我无法看到我们如何覆盖IndexUpdateContext,因为它是在非虚方法中创建的.自定义DatabaseCrawler可以获得一些访问权限,但只能访问已创建的上下文对象.
我注意到我们可以在web.config中为每个索引定义我们自己的索引实现.我们还可以重新实现爬虫(我们已经从共享模块中获得了高级爬虫),并且可以控制索引过程.我不愿意将太多的Sitecore代码提取到我们自己的实现中,因为它可能会影响未来的更新.
关于IndexingProvider,我有一个问题.在以下方法中:
private void UpdateItem(HistoryEntry entry, Database database)
{
int count = database.Indexes.Count;
if (count != 0 || this.OnUpdateItem != null)
{
Item obj = database.GetItem(entry.ItemId, entry.ItemLanguage, entry.ItemVersion);
if (obj != null)
{
if (this.OnUpdateItem != null)
this.OnUpdateItem((object) this, (EventArgs) new SitecoreEventArgs("index:updateitem", new object[2]
{
(object) database,
(object) obj
}, new EventResult()));
for (int index = 0; index < count; ++index)
database.Indexes[index].UpdateItem(obj);
}
} …Run Code Online (Sandbox Code Playgroud) 当您有一个包含项目列表的对象时,如何管理这个简单的场景.例如:
public class ContainerObject
{
IList<ChildObject> Children { get; }
public void AddCustom(ChildObject toAdd)
{
// Some validation ...
Children.Add(toAdd);
}
}
Run Code Online (Sandbox Code Playgroud)
假设集合初始化为IList的实现,是否有任何方法可以控制项目添加到列表的方式?
例如,我在ContainerObject类上有另一个方法,它接受一个ChildObject并将其添加到列表中.在添加之前,需要此方法对ChildObject执行一些基本验证.
我很懒,因为我不想乱搞并编写一个消费开发人员需要实现的自定义列表界面(没有添加方法).我也在IQueryable接口上使用ToList()方法,所以这是坚持IList的另一个原因 - 它只是起作用.
那么,有没有一种方法可以监控项目如何添加到IList实例,即阻止使用Add方法,只允许通过我的自定义方法添加到集合中,或者我只是要求不可能的?......而且很懒:(
我可以想到一些hacky方法来检查何时通过我的自定义方法或直接在列表中添加项目但这些看起来很糟糕!
有人遇到类似的东西吗?如果是这样,你做了什么?
asp.net-mvc ×3
c# ×3
.net ×2
architecture ×2
sql ×2
.net-3.5 ×1
.net-core ×1
batch-file ×1
cmd ×1
coding-style ×1
git ×1
iis-6 ×1
lazy-loading ×1
linq-to-sql ×1
lucene.net ×1
methodology ×1
ninject ×1
performance ×1
resharper ×1
sitecore ×1
sitecore6 ×1
sql-server ×1
structuremap ×1
t-sql ×1
teamcity ×1
teamcity-8.0 ×1
windows ×1