我在编程经历中遇到过一些状态模式的实现,并做了一些.我已经看到它们在各种场景中使用(主要是UI和解析).麻烦的是,所有这些都在快速发展的压力下变成了难以维护和可理解的代码块.我正在考虑重构其中一个,但我在网上找不到好的资源.在线状态模型有很多简单的例子,但我需要更深入的资源.
所以我在寻找:
感谢您的时间
我希望在我的应用程序中有可自定义的工具栏,例如Visual Studio 2008提供的工具栏(右键单击工具栏,自定义).我需要一个WPF解决方案,而我无法找到任何解决方案(无论是SO还是谷歌).我确实找到了这个Visual Studio 2010博客条目,这意味着即使是微软也无法做到这一点.所以无论如何,为了保持简单,问题是,是否有任何提供此功能的开源/免费框架(它不必是VS2008解决方案的精确复制品).
我一直在玩变基,试图拆分和合并历史记录,如下所述:https : //git-scm.com/book/en/v2/Git-Tools-Replace
这是我的带有拆分历史记录的测试存储库:https : //github.com/defufna/split-history
请注意,“初始提交”和“添加描述”提交都指向同一棵树。我要做的是合并这两个历史记录(同时保持合并)。我用过这个:
git rebase --rebase-merges --onto history 94da9b0f
Run Code Online (Sandbox Code Playgroud)
这有效,但我在 084dae5 遇到冲突。这是一个解决修改/删除冲突的合并,它需要我手动解决这个冲突。
我这样做是为了准备更大的 repo 合并,在那里我将不得不做类似的事情,但有 50k 次提交,所以我想避免手动解决冲突。我知道 git replace 可以解决我的问题,但我很好奇是否可以在不替换的情况下做到这一点。我还想在历史分支中保留提交的 sha 值。
编辑:
所以我已经设法做我想做的事,但我不确定这个想法有多好。我已经添加了 -i 到 rebase,当我得到 todo 文件时,我已经改变了每个
merge -C 9751be2 Merge # Merge
Run Code Online (Sandbox Code Playgroud)
线入:
exec git checkout `git commit-tree '9751be2^{tree}' -p HEAD -p refs/rewritten/Merge -m Merge`
Run Code Online (Sandbox Code Playgroud)
我基本上是在遇到合并时告诉 git 重用原始合并中的树。
它按预期工作(目前),但速度要慢得多。有一个更好的方法吗?
我正在调查导致窗口冻结的错误.发生错误后,当前正在运行的所有进程将继续运行,但如果您尝试使用它们,它们最终会冻结.
例如,我有一个任务管理器,并在冻结时打开几个cmd.任务管理器工作得很好,显示处理器/内存使用情况,所有进程的列表等.但如果我试图杀死一个进程,它会冻结.如果我试图打开文件 - >新任务,它会冻结.在cmd中,如果我尝试打开Windows应用程序,该命令将执行,新进程将出现在任务管理器中,但应用程序将无法启动.即使启动命令行应用程序也会冻结.
所讨论的软件是一组12个各种服务应用程序,它们使用WCF相互通信.大多数是用C#编写的,有一些Fortran,C++.所有这些都在运行用户空间,我们在内核空间中没有任何执行.
所以我的问题是有没有人看过这个或类似的行为?原因是什么?理论上,用户空间应用程序不应该冻结整个操作系统吗?有关调试此情况的任何提示也会有所帮助.感谢您的时间.
我们尝试编写一个小应用程序,它不断地从磁盘写入/读取(随机搜索和打开/关闭文件)并在系统冻结之前启动.应用程序在冻结后继续成功写入/读取打开和关闭文件.内存使用情况与正常使用情况相同,在4到5 GB之间,系统有6GB.
我们还做了内存转储,麻烦的是我们没弄清楚发生了什么.转储当然表明Windows已经冻结在键盘驱动程序中,但除此之外,我们无法想象太多.如果我们可以进行用户空间内存转储会更有用.好吧这句话让我对谷歌有点了,看来有一个完整的内存转储选项,会对此进行更多研究并更新进度.
我们目前的嫌疑人是NOD32防火墙,当它关闭时,一切似乎都正常.我们仍然需要确认这一点,并找出我们的代码中的哪些因素引发了这种行为.
谢谢大家的帮助.
好的,我设法创建了完整的内存转储.这并不像我希望的那么容易,这里有一些有用的资源,也许有一天他们会帮助别人..:
http://www.osronline.com/article.cfm?article=545
一旦系统冻结,我启动了一个cmd.exe并启动了复制命令,cmd冻结了,这是它的堆栈跟踪:
fffff880`087571d0 fffff800`02cc2992 nt!KiSwapContext+0x7a
fffff880`08757310 fffff800`02cc4d0f nt!KiCommitThreadWait+0x1d2
fffff880`087573a0 fffff800`02cd9d1f nt!KeWaitForSingleObject+0x19f
fffff880`08757440 fffff800`02fc06d6 nt!AlpcpSignalAndWait+0x8f
fffff880`087574f0 fffff800`02fbe660 nt!AlpcpReceiveSynchronousReply+0x46
fffff880`08757550 fffff800`02fcd13d nt!AlpcpProcessSynchronousRequest+0x33d
fffff880`08757670 fffff800`030ade59 nt!LpcpRequestWaitReplyPort+0x9c
fffff880`087576d0 fffff880`05ad1344 nt!LpcRequestWaitReplyPort+0x19
fffff880`08757710 fffff880`05ad430f eamon+0x5344
fffff880`087578d0 fffff880`05ad25bb eamon+0x830f
fffff880`08757970 fffff800`02fd075f eamon+0x65bb
fffff880`087579f0 fffff800`02fb6624 nt!IopCloseFile+0x11f
fffff880`08757a80 fffff800`02fd0251 nt!ObpDecrementHandleCount+0xb4
fffff880`08757b00 fffff800`02fd0164 nt!ObpCloseHandleTableEntry+0xb1
fffff880`08757b90 fffff800`02cba953 nt!ObpCloseHandle+0x94
fffff880`08757be0 00000000`77bff7aa nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`08757be0)
00000000`002fd848 00000000`00000000 ntdll!ZwClose+0xa
Run Code Online (Sandbox Code Playgroud)
经过一些广泛的测试后,我们得出结论,该问题与ESET NOD32 Antivirus有关.谢谢大家的帮助和提供的信息.
我有.NET应用程序,崩溃了NullReferenceException。有趣的是,日志显示如下:
Inner Exception System.NullReferenceException: Object reference not set to an instance of an object.
at System.Object.GetType()
Run Code Online (Sandbox Code Playgroud)
令我感到困惑的是,该异常发生在GetType内部,而不是在调用GetType的行上。我已经测试了以下情况。
如果我在一个null对象上调用GetType,则异常发生在调用GetType的行上,而不是在GetType内。我也尝试过如何在此代码示例中获取NullReferenceException?但是奇怪的是我在Program.Main中得到了异常,而不是在Object.GetType中(尽管在那篇文章中它在GetType中)。
我还尝试了同时创建对象和调用GetType的尝试,但总而言之,在创建.net对象时没有窗口,其中GetType抛出NullReferenceException。我现在唯一想到的是,这可能是某些较旧的.NET实现的行为。
因此,无论如何在GetType中引起NullReferenceException的任何想法,如果可以提供概念证明代码,我将万分感激。感谢您的时间。