如果我想使用ant在JAR清单中嵌入当前时间,那么我可以使用"现在"使用的ant属性以及哪个manifest属性最好放置此信息?
我目前有以下内容
<manifest>
<attribute name="Signature-Title" value="${project.name}"/>
<attribute name="Signature-Version" value="${release.version}"/>
<attribute name="Signature-Vendor" value="XXX"/>
<attribute name="Built-By" value="${user.name}"/>
</manifest>
Run Code Online (Sandbox Code Playgroud) 我知道有一种方法可以显示visual studio中解决方案中包含的每个项目的构建时间.但我正在寻找的是构建整个解决方案所花费的总时间,从我点击构建的那一刻起到完成的那一刻.
反正有没有这样做?运行Visual Studio 2008.
如何找出编译器花费时间的位置?
我的构建速度太慢,我已经在使用RAMdisk作为VC++临时文件,它没有任何区别.(我有一个SSD,所以我预计没有区别.)
这个项目中的大多数单个C++文件都需要大约.编译2秒似乎很糟糕(因为我也没有任何项目内并行化,因为我使用的是VS2005).
我该如何优化呢?不进行分析就不优化,但如何分析编译器?
注意:这些并不是真的有用:
让我们添加一个好评:你有很多模板吗?你的文件平均有多大?你检查过,只包括最少的必要标题
不,我没有.我当然可以(当然也会).我或许可以找到一些东西,但这都是猜测和反复试验!
"Everybody"告诉您,您应该只在测量/分析后进行优化,但在优化编译时,我们又回到了试验和错误状态?
注:建议从与评论"黑客" __TIME__
也不能正常工作,至少不会在视觉-C++,因为(在文档状态):在最近的编译时间电流源文件.时间是hh:mm:ss形式的字符串文字. - 我想至少可以获得带有这个标记的单个编译单元的时间,但是它无助于向下钻取到编译单元.
我们有使用gcc和make文件的项目.项目还包含一个大的子项目(SDK)和许多使用该SDK和一些共享框架的相对较小的子项目.
我们使用预编译的头文件,但这有助于重新编译更快.
是否有任何已知的技术和工具可以帮助构建时优化?或者您可能知道有关此主题或相关主题的文章/资源?
我使用的是__DATE__
和__TIME__
Objective-C中得到我的应用程序的构建日期和时间.我找不到在Swift中获取此信息的方法.可能吗?
我一直认为在服务器上使用NodeJS的一大好处是可能在服务器端和客户端之间共享代码(例如输入验证).现在我实际上正在使用NodeJS进行开发,我发现的一个难点是确定执行每个代码体的责任和上下文.下面我将列出一些我曾经遇到过的困难,希望能够对我可能忽略的惯例或指导有所启发,这有助于提升这些问题.
构建时间代码
以遵循基本文档的方式构建使用Gulp,Grunt或vanilla NPM的项目的时间代码通常很容易理解.大多数较小的项目倾向于将所有代码保存在单个文件中,并且文件往往被命名为传统名称,如gulpfile.js,但是对于更大的项目,我看到这些脚本开始被拆分.我已经看到一些gulp文件被拆分成多个文件并放在一个单独的目录下的情况.更糟糕的是,我发现gulpfile.js文件甚至没有这样命名的情况导致新开发人员寻找gulpfile所在的位置,一旦找到它,gulp命令总是必须运行特定的- -gulpfile选项.
运行时服务器端代码
基本节点应用程序的入口点似乎只需要在运行node命令时指出特定的JavaScript文件(例如node script.js
).对于Web服务器应用程序,例如那些使用Express的应用程序,我注意到按照惯例,入口点文件通常称为server.js,通常可以在应用程序的根目录中找到.在某些其他情况下,例如在开发人员环境中运行Web服务器时,我看到gulp任务负责启动Node.在这些情况下,似乎有多种方法可以包含入口点,但我发现的一个例子就是启动webpack编译器,然后是入口点脚本的require语句.在这种类型的设置中,弄清楚如何结合关于如何完成典型节点调试命令的正常指导是非常重要的.除了应用程序的入口点之外,似乎没有关于NodeJS/Express应用程序的目录结构的任何一般指导,这些应用程序将服务器端特定代码保存在其中以帮助定位它并使其与构建时间和客户端代码.
服务器端代码既用于提供静态内容,服务器端生成的视图(例如使用MVC),也用于向客户端提供API,服务器端故事变得更加复杂.侧.我倾向于将API与应用程序项目分开,但我从其他人那里得到的感觉是,这样做有一种过于复杂的感觉,我将其视为合理的关注点分离.
运行时客户端代码
由于客户端代码通常可以根据请求的第一页具有各种入口点,因此这可能很棘手.但是,由于URL的一般透明性以及它们如何映射到典型情况下的资源,以及调试工具在现代浏览器中的强大程度,因此遵循脚本并不会太麻烦.对于典型的构建过程而言,难以替代客户端代码,这通常最终会复制文件并将它们放置在不同名称下的生产类结构中.一个例子是一个项目,它有一个名为src或js的文件夹,它保存客户端和服务器端代码混合,除了只有一部分文件碰巧包含在构建任务中,该任务转换并经常连接文件和将它们放在分发文件夹中.我见过的这些分发文件夹的常用名称是dist,public,www和wwwroot.通常,如果不总是这些目录位于项目的根目录,这至少使得它更容易定位而无需询问构建脚本.
我希望有一些一般指导如何将所有这些结合在一起,或许是一个权威的来源,主要是为那些像我一样可能想要从右脚开始的人提供指导.作为副作用或许能够引用某种标准,即使它是一个松散的标准,也可能减少团队在开始时发明和讨论的样板数量.在上面列出的每个上下文中,显然会有一些技术特定的约定,例如客户端的AngularJS,Meteor或ReactJS遵循的约定.我正在寻找的约定更具体地分离端到端JavaScript应用程序中的主要高级上下文,其中语言和平台不再是区分每种语言和平台的明显方式.
我们有一个C++项目,其中有几个由预处理工具生成并编译到我们项目中的大型静态数据表(结构数组).到目前为止,我们一直在使用VC++ 2008,但是准备进入2010年,这些数据表突然需要很长时间才能编译.
例如,一个这样的表有大约3,000个条目,每个条目都是一个包含几个整数和指针的结构,所有这些都是静态初始化的.这个文件在VC++ 2008中编译需要大约15秒,但在VC++ 2010中需要30 分钟!
作为一个实验,我尝试将此表均匀地分成8个表,每个表都在自己的.cpp文件中,并且每个表在20-30秒内编译.这让我觉得编译器内部的东西在这些表的长度上是O(n ^ 2).
cl.exe平台的内存使用量大约为400 MB(我的机器有12 GB的RAM),一旦它处于高位状态,我看不到任何I/O活动,所以我认为这不是磁盘缓存问题.
有谁知道这里会发生什么?是否有一些编译器功能我可以关闭以恢复正常的编译时间?
以下是表中数据的示例:
// cid (0 = 0x0)
{
OID_cid,
OTYP_Cid,
0 | FOPTI_GetFn,
NULL,
0,
NULL,
(PFNGET_VOID) static_cast<PFNGET_CID>(&CBasic::Cid),
NULL,
CID_Basic,
"cid",
OID_Identity,
0,
NULL,
},
// IS_DERIVED_FROM (1 = 0x1)
{
OID_IS_DERIVED_FROM,
OTYP_Bool,
0 | FOPTI_Fn,
COptThunkMgr::ThunkOptBasicIS_DERIVED_FROM,
false,
NULL,
NULL,
NULL,
CID_Basic,
"IS_DERIVED_FROM",
OID_Nil,
0,
&COptionInfoMgr::s_aFnsig[0],
},
// FIRE_TRIGGER_EVENT (2 = 0x2)
{
OID_FIRE_TRIGGER_EVENT,
OTYP_Void,
0 | FOPTI_Fn,
COptThunkMgr::ThunkOptBasicFIRE_TRIGGER_EVENT,
false,
NULL,
NULL,
NULL,
CID_Basic,
"FIRE_TRIGGER_EVENT",
OID_Nil,
0, …
Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的问题,但我是使用Docker-compose的新手.到目前为止,我喜欢它...但我有一些很长的构建时间.我有一个包含多个依赖项的项目,每次进行更改时我都需要显然重建源代码.现在,我正在呼吁docker-compose build
重建容器,然后是一个docker-compose up
.问题是:
它正在为源代码所做的每一次更改重建整个容器(这需要很长时间 - 获取依赖项/等).这显着减慢了我的速度.
我真的觉得我应该能够在容器上运行命令来重建然后重新运行可执行文件,就像这样:
docker-compose run web go build . docker-compose run web ./app要么
docker-compose run web go build . docker-compose restart这应该有效,因为我正在使用卷在主机和容器之间共享代码.不应该需要重新获取所有依赖项.它不应该使用新建的可执行文件吗?但是,这并不反映构建的更改和端口转发似乎中断.
作为参考,这是我的Dockerfile:
FROM golang:1.8
COPY . /go/src/github.com/codeblooded/test1
WORKDIR /go/src/github.com/codeblooded/test1
RUN echo $PATH
RUN go get -d -v ./...
RUN go install -v ./...
RUN go build -o test1 .
CMD ["test1"]
EXPOSE 3470
Run Code Online (Sandbox Code Playgroud)
还有我的docker-compose.yml文件:
version: '3'
services:
postgres:
image: postgres
volumes:
- ./db/data/psql:/var/lib/postgresql/data
- ./db/schema:/db/schema
redis: …
Run Code Online (Sandbox Code Playgroud) 我对解决方案加载时间和构建时间特别感兴趣 - 更少的解决方案意味着更好的性能吗?
请注意,我不是指构建的应用程序的性能.
使用较少数量的项目时,加载时间和构建时间是否更有效?
作为指南,我们的Visual Studio解决方案中有50-60个项目.
我的 externalFiles 目录中有 100 个 .h 文件。我的源代码中大约有 10 个 .cpp 文件包含这些 .h 文件。
因此,我#include externalFiles/.*h
从 .cpp 文件中删除了所有指令,并将它们写入通过 Cmake 包含的 pch.h 标头中target_precompile_headers(${PROJECT_NAME} PRIVATE pch.h)
。
我通过 Cmake 使用预编译头检查了构建时间,而不是简单地将 pch.h 包含在我的 .cpp 文件中。我使用以下方法记录了构建时间:
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")
和
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CMAKE_COMMAND} -E time")
使用预编译头构建时间
[1/2] 构建 CXX 对象 CMakeFiles/AlgoCoding.dir/main.cpp.obj
经过时间:11 秒。(时间),11.413 秒。(钟)
[2/2] 链接 CXX 可执行文件 AlgoCoding.exe
经过时间:54 秒。(时间),53.459 秒。(钟)
构建时间仅包括标头
[1/2] 构建 CXX 对象 CMakeFiles/AlgoCoding.dir/main.cpp.obj
经过时间:14秒。(时间),13.35 秒。(钟)
[2/2] 链接 CXX 可执行文件 …
build-time ×10
c++ ×4
ant ×1
build ×1
docker ×1
gcc ×1
go ×1
java ×1
javascript ×1
linker ×1
makefile ×1
manifest ×1
node.js ×1
optimization ×1
organization ×1
profiling ×1
runtime ×1
swift ×1
visual-c++ ×1