Doxygen在我们的代码库上运行大约需要12个小时.这主要是因为要处理的代码很多(~1.5M行).但是,它很快就会达到我们无法进行夜间文档更新的程度,因为它们需要太长时间.我们已经不得不减少图表深度,使其降至12小时.
我已经尝试过标准方法,但我确实需要高质量的输出,这包括图形和SEARCH_INCLUDES.我有一个相当不错的机器来运行Doxygen,但Doxygen没有利用它的许多核心.(它与构建服务器上的单个CPU挂钩,但只占可用系统的4%.)具有多线程Dot构建非常方便,但这只是构建时间的一半左右.
是否有任何技术可用于通过多个进程运行doxygen并手动分割任务?我已经看过一些关于创建标记文件的讨论,但我不太了解他们是否知道他们是否按照我的意愿行事.我正在寻找的是:
doxygen Doxyfile-folder1
doxygen Doxyfile-folder2
doxygen Doxyfile-folder3
doxygen Doxyfile-folder4
doxygen-join output/folder1/html output/folder2/html output/folder3/html output/folder4/html
Run Code Online (Sandbox Code Playgroud)
当然,我只是制作东西,但这是我想要的东西的想法.此外,我使用了超过4个进程.
基本上,它在锡上说的是:TortoiseHg很慢.
我的团队最近从Subversion搬到了Mercurial.(部分是为了利用Kiln进行代码审查)我们注意到的一件事是通过TortoiseHg与Mercurial进行交互是非常缓慢的.一些统计数据:
所有这些确实增加了一种非常缓慢的感觉应用.作为参考,以下是命令行工具时间:
hg status:4.573秒hg incoming:12.150秒命令行时间似乎与工作台时间一致,但工作台使延迟更加令人沮丧,因为它与程序的使用同步.例如,一个典型的任务是"获取我的同事刚刚推送的最新资料".它看起来像这样(只列出在计算机上等待的时间,舍入):
总计:24分32秒.
这些分钟中的十二分钟用于搁置和搁置.十个人刚刚开业.这样做的一个后果是人们倾向于提交他们不确定会去任何地方的东西,以避免搁置成本.但即使你没有搁置也没有开放费用(也许你只是让它打开),仍然需要2分半钟的细致点击来获得最新的东西.
而这甚至不计算克隆等等更重要的东西.一切都很慢.
我有:
存储库实际上是两个存储库:主存储库和包含所有第三方二进制文件的子存储库..hg主仓库的文件夹是676 MB..hg子仓库的文件夹是641 MB.default主仓库中的内容为7.05 GB.default子仓库中的内容为642 MB.主仓库中的平均文件大小为563 KB.主仓库中的最大文件大小为170 MB.主仓库中有13,438个文件.子仓库中的平均文件大小为23KB.子仓库中的最大文件大小为132 MB.子仓库中有57087个文件.
我启用了big-push,caseguard,fetch,gestalt,kbfiles,kiln,kilnauth,kilnpath,mq,purge和移植扩展.
任何想法从哪里开始弄清楚如何加快速度?缓慢让我们发疯.
我有一个大型应用程序,最近开始在调试器中运行时表现出相当奇怪的行为.一,基础知识:
OS: Windows 7 64-bit.
Application: Multithreaded VCL app with many dlls, bpls, and other components.
Compiler/IDE: Embarcadero RAD Studio 2010.
Run Code Online (Sandbox Code Playgroud)
观察到的症状是这样的:当调试器附加到我的应用程序时,某些任务会导致应用程序崩溃.这些细节进一步令人困惑:我的应用程序因Windows消息"YouApplication已停止工作"而停止.它有助于向微软发送一个小型转储.
应该注意:当未附加调试器时,应用程序不会崩溃.此外,调试器在应用程序运行时不会指示任何异常或其他问题.
设置和单步执行断点似乎会影响应用程序崩溃的点,但我怀疑这是调试线程而不是有问题的线程的症状.
这些崩溃也发生在我同事的计算机上,我观察到同样的行为.这使我不怀疑在我的计算机上安装了某些东西失败了.遇到此问题的同事也在运行Windows 7 64位.我没有同事没有遇到这个问题.
我从崩溃中收集了一些已分析的完整转储.我发现失败实际上每次都发生在同一个地方.这是来自转储的异常数据(它总是相同的,当然除了ThreadId):
Exception Information
ThreadId: 0x000014C0
Code: 0x4000001F Unknown (4000001F)
Address: 0x773F2507
Flags: 0x00000000
NumberParameters: 0x00000001
0x00000000
Run Code Online (Sandbox Code Playgroud)
Google透露,代码0x4000001F实际上是STATUS_WX86_BREAKPOINT.Microsoft无益地将其描述为"Win32 x86仿真子系统使用的异常状态代码".
这是堆栈详细信息(似乎没有变化):
0x773F2507: ntdll.dll+0x000A2507: RtlQueryCriticalSectionOwner + 0x000000E8
0x773F3DAB: ntdll.dll+0x000A3DAB: RtlQueryProcessLockInformation + 0x0000020D
0x773D2ED9: ntdll.dll+0x00082ED9: RtlUlonglongByteSwap + 0x00005C69
0x773F3553: ntdll.dll+0x000A3553: RtlpQueryProcessDebugInformationRemote + 0x00000044
0x74F73677: kernel32.dll+0x00013677: BaseThreadInitThunk + 0x00000012
0x77389F02: ntdll.dll+0x00039F02: RtlInitializeExceptionChain + 0x00000063
0x77389ED5: ntdll.dll+0x00039ED5: RtlInitializeExceptionChain + …Run Code Online (Sandbox Code Playgroud) 我有一个运行使用的JScript脚本cscript.exe.它在桌面(以及开始菜单)中创建一个快捷方式,该快捷方式cscript.exe使用参数运行以运行另一个JScript脚本.相关部分看起来像这样:
function create_shortcut_at(folder, target_script_folder)
{
var shell = new ActiveXObject("WScript.Shell");
var shortcut = shell.CreateShortcut(folder + "\\Run The Script.lnk");
shortcut.TargetPath = "cscript";
shortcut.Arguments = "\""+target_script_folder+"\\script.js\" /aParam /orTwo";
shortcut.IconLocation = target_script_folder+"\\icon.ico";
shortcut.Save();
}
Run Code Online (Sandbox Code Playgroud)
它被称为create_shortcut_at(desktop_folder, script_folder).
这是有效的,就其而言.它会创建桌面图标,正确指向脚本并在双击时运行它.问题是它确实需要"以管理员身份"运行脚本.
该脚本确实需要"以管理员身份"运行 - 它安装应用程序(适用于所有用户)并重新启动计算机.(对于那些感兴趣的人,脚本是wpkg.js.修改它以自我提升是不可取的.)
由于快捷方式的目标实际上是"cscript.exe",因此我无法使用清单进行升级.理论上我可以在windows目录中安装一个cscript.exe.manifest,但即使这样可行,但由于明显的原因,这将是一个可怕的想法.
我也不想使用虚拟脚本,因为这是一个额外的文件来处理,并且还有另一个看似合理的解决方案:检查快捷方式上的"以管理员身份运行"框.
三十秒的调查显示WScript.Shell ActiveX对象没有此所需的接口.另外的调查显示IShellLinkDataList可以.但是,IShellLinkDataList是一个通用的COM接口.我在互联网上看到几个例子,大多数链接在这里.但是,所有示例都是在编译代码(C++,C#,甚至是JScript.NET)中完成的.我非常喜欢能够直接在JScript中运行,从中运行cscript.exe.
也就是说,我完全是出于我没有想到的想法或其他解决方案.
我正在 CodeGear RAD Studio 中使用 decltype 编写一些代码。我尝试过简单的解决方案,它看起来与此没有什么不同:
\n\nint main(int, char**) {\n int i;\n int &ir = i;\n decltype((ir)) ir_clone = ir;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当然,这无法编译:内部编译器错误。我相当怀疑该代码没有什么特别的错误,并且存在关于引用表达式的编译器错误。(顺便说一句,g++ 的代码没有问题,并且编译得很好。)但这无助于解决问题,因为平台是不可协商的。
\n\n如果上面我写了
\n\n decltype(ir) ir_clone = ir; /* No extra parens */\nRun Code Online (Sandbox Code Playgroud)\n\n它可以按预期编译并工作。然而,问题并没有就此结束,因为这不能正确计算环境的常量性。尤其:
\n\nstruct S { int i; } s;\nconst S* p = &s;\ndecltype(p->i) i0 = s.i; /* i0 is an int */\ndecltype((p->i)) i1 = s.i; /* i1 is a const int& */\nRun Code Online (Sandbox Code Playgroud)\n\n如果我不使用括号使参数成为表达式,我就会失去我需要的参数的常量性。
\n\n我\xc2\xa0可以使用的另一个工具是简单模板,如下所示:
\n\ntemplate<class T> struct unref { …Run Code Online (Sandbox Code Playgroud) c++ ×2
performance ×2
activex ×1
c++11 ×1
c++builder ×1
com ×1
decltype ×1
dll ×1
doxygen ×1
exception ×1
jscript ×1
mercurial ×1
shortcut ×1
tortoisehg ×1
wsh ×1