小编pau*_*doo的帖子

收集操作系统和工具版本号以用于构建存档目的

我们的自动构建机器需要存档操作系统的版本号以及每次构建期间使用的各种工具.(如果我们以后需要复制完全相同的构建,也许当机器长时间死亡时.)

我看到命令"msinfo32.exe"可用于转储整个系统版本信息,我们也可以将其归档.

有没有人知道如何轻松存档Visual Studio工具的版本号?

其他开发人员使用哪些机制来收集此类信息以进行存档?


Fabio Gomes的额外信息.

我同意你的看法,在5年的时间里,重建确切的操作系统和工具配置(直到最近的安全更新)可能是不可能的.不幸的是,这确实来自合同要求.作为我们向客户交付的一部分,我们必须提供所有源代码的副本以及有关如何复制构建的明确说明.我们可能无法完美地满足这一要求.

所以 - 我只是将你的答案标记为正确(我同意你的意见,这几乎是不可能的),并继续玩其余的堆栈溢出.:)

PS.如果堆栈溢出支持回复答案而不必编辑原始问题,那将是非常好的.但我发现它已被拒绝.

build-automation versions archive

6
推荐指数
1
解决办法
154
查看次数

清单中的Visual Studio 2005安全更新和CRT DLL版本

最近的Visual Studio 2005安全更新可能会给我们带来问题.

我们构建并内部分发用C++编写的SDK.这些SDK仅是头文件和静态库的集合.安装安全更新后,我们的SDK现在依赖于较新版本的MSVC CRT DLL.这些SDK在生成EXE文件的项目的下游使用.

如果其中一个EXE文件是使用混合SDK构建的(一些来自安全更新之前,一些来自之后),那么生成的EXE文件会引用两组MSVC运行时DLL.例如:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
            </assemblyIdentity>
        </dependentAssembly>
    </dependency>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
            </assemblyIdentity>
        </dependentAssembly>
    </dependency>
</assembly>
Run Code Online (Sandbox Code Playgroud)

这是否意味着在运行时这个EXE将使用这两个版本的DLL?这是否意味着我们必须使用此EXE分发两个版本的MSVC运行时DLL?

有没有一种简单的方法来避免这个问题,而不强制使用Visual Studio 2005安全补丁构建所有SDK?(对于我们不希望不必要地重建的一些较旧且相当稳定的SDK,这是不合需要的)

是否可以简单地重写SDK或最终EXE文件上的清单文件,以便只提到一个版本的MSVC CRT DLL?


我的理解是相关更新如下:

Microsoft Visual Studio 2005 Service Pack 1的安全更新:KB971090

http://go.microsoft.com/fwlink/?LinkId=155934

Microsoft Visual Studio 2008 Service Pack 1的安全更新:KB971092

http://go.microsoft.com/fwlink/?LinkID=155933


我发现了另外两个相似的问题:

VC++:KB971090并选择Visual C运行时DLL依赖项

热修复客户站点时,最新的Visual Studio 2005安全更新是否会导致C运行时库问题

security dll version manifest visual-c++

6
推荐指数
1
解决办法
5263
查看次数

在显示GPU上使用OpenCL时,如何确保GUI响应?

在我学习OpenCL的相对较短的时间里,我经常看到我的应用程序导致操作系统UI的响应速度明显降低(例如,窗口响应拖动几秒钟).我在使用NVidia GPU的Windows Vista和Mac OS X上遇到过这个问题.

在与显示器相同的GPU上使用OpenCL时,我可以做些什么来确保我的应用程序不会显着降低像这样的UI响应?此外,这可以在我的应用程序中不会造成不必要的性能损失吗?(即,如果用户没有做一些UI密集型任务,那么我不希望我的应用程序运行速度比现在慢.)

我知道任何答案都将是特定于平台的(其中平台包括OS/GPU /驱动程序组合).

performance gpu opencl

6
推荐指数
1
解决办法
1199
查看次数

为什么foreach跳过对接口类型的编译时类型检查?

当我foreach在C#中使用循环时,如果项类型是接口类型,则似乎不执行编译时类型检查.

例如

class SomeClass {}
interface SomeInterface {}

IEnumerable<SomeClass> stuff;
foreach(SomeInterface obj in stuff) { // This compiles - why!?
}
Run Code Online (Sandbox Code Playgroud)

这将很乐意编译并在运行时导致异常,当它在编译时很清楚这没有意义.如果我将项类型更改SomeInterface为另一个类,则会恢复编译时类型检查:

IEnumerable<SomeClass> stuff;
foreach(Random obj in stuff) { // This doesn't compile - good!
}
Run Code Online (Sandbox Code Playgroud)

当项类型是接口时,为什么没有编译时类型检查?

(这在Visual Studio 2008中的.NET 3.5 SP1中发生)

c# foreach static-typing visual-studio-2008

6
推荐指数
1
解决办法
418
查看次数

使用`line-seq`和`reader`,文件什么时候关闭?

我正在使用文本文件读取行(line-seq (reader "input.txt")).然后这个集合传递给我的程序使用.

我担心这可能是糟糕的风格,因为我没有确定性地关闭文件.我想我无法使用(with-open (line-seq (reader "input.txt"))),因为在我遍历整个序列之前,文件流可能会被关闭.

应该lazy-seqreader文件一起避免吗?我应该在这里使用不同的模式吗?

io clojure lazy-evaluation

6
推荐指数
1
解决办法
2647
查看次数

如何在linux中的进程(线程?)ID相关的优先级和调度程序策略?

我正在调查如何让我的Linux桌面体验保持流畅和交互,同时我在后台运行CPU密集型任务.这是我用来模拟CPU负载的示例程序(用Java编写):

public class Spinner {
    public static void main(String[] args)
    {
        for (int i = 0; i < 100; i++) {
            (new Thread(new Runnable() {
                    public void run() {
                        while (true);
                    }
            })).start();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在命令行上运行它时,我注意到我的桌面应用程序(例如文本编辑器)的交互性显着下降.我有一台双核机器,所以我并不为此感到惊讶.

为了解决这个问题,我的第一个想法是用这个过程很好renice -p 20 <pid>.然而,我发现这没有多大影响.相反,我必须使用ls /proc/<pid>/task | xargs renice 20 -p --具有更大效果的所有子进程.

我对此非常困惑,因为我不希望线程拥有自己的进程ID.即使他们这样做了,我也期望renice在整个过程中采取行动,而不仅仅是过程的主线.

有没有人清楚地了解这里发生了什么? 似乎每个线程实际上是一个单独的进程(至少它有一个有效的PID).我知道历史上Linux就像这样工作,但我相信几年前NPTL已经解决了.

我正在测试RHEL 5.4(Linux内核2.6.18).

(sched_setscheduler(<pid>, SCHED_BATCH, ..)顺便说一句.如果我试图解决这个交互性问题,我会注意到同样的效果.也就是说,我需要对我所见的所有"子"进程进行调用/proc/<pid>/task,仅执行一次是不够的在主程序pid.)

linux scheduling thread-priority

6
推荐指数
1
解决办法
1691
查看次数

如何调整 G1GC 以减少内存占用?

我一直在我的一个项目中试验 G1GC 和 Java 8(Oracle JVM)。我的 GC 标志有效地:

-Xms64m
-Xmx1024m
-XX:+UseG1GC
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xloggc:/tmp/gc.log
-XX:+PrintAdaptiveSizePolicy
Run Code Online (Sandbox Code Playgroud)

我观察到堆的增长比我拥有的实时数据量大得多。GC 日志显示了我认为的根本原因:

[G1Ergonomics (Heap Sizing) attempt heap expansion, reason: recent GC overhead higher than threshold after GC, recent GC overhead: 10.17 %, threshold: 10.00 %, uncommitted: 811597824 bytes, calculated expansion amount: 162319564 bytes (20.00 %)]
Run Code Online (Sandbox Code Playgroud)

实际上,我的应用程序正在生成大量垃圾,因此花费在 GC 上的时间比例高于 10%,因此 G1 的人体工程学增加了堆大小。


使用 Parallel 收集器可以调整这个阈值-XX:GCTimeRatio(吞吐量目标),但从我在文档中看到的情况来看,G1 没有等效的标志。

对于并行收集器,Java SE 提供了两个基于实现应用程序指定行为的垃圾收集调优参数:最大暂停时间目标和应用程序吞吐量目标;请参阅并行收集器部分。(这两个选项在其他收集器中不可用。)请注意,这些行为无法始终满足。

我的问题是,除了降低最大堆大小之外,如何调整 G1GC 以减少内存占用?

在日志中,没有证据表明我超出了最大暂停时间目标,并且确实增加并不能解决问题。


这可能是对这个问题的欺骗:哪个 JVM 标志设置了 G1Ergonomics 日志中提到的 GC 开销阈值?,但看起来已经接受了错误的答案。(或者也许它只适用于旧版本的 …

java jvm g1gc

6
推荐指数
2
解决办法
5359
查看次数

使用 CreateFileMapping 在页面文件中分配页面的目的是什么?

函数CreateFileMapping可用于在页面文件中分配空间(如果第一个参数是INVALID_HANDLE_VALUE)。分配的空间可以稍后被内存映射到进程虚拟地址空间。

为什么我要这样做而不是只使用VirtualAlloc

似乎这两个函数几乎都在做同样的事情。VirtualAlloc 分配的内存可能会在某个时候被推送到页面文件中。为什么我需要一个 API 来专门请求我的页面在第一个实例中分配到那里?我为什么要关心我的私人页面在哪里?

它只是向操作系统提示我预期的内存使用模式吗?(即,前者暗示更积极地换出这些页面。)

或者它只是在 32 位进程上处理非常大的数据集时的一种方便方法?(即,我可以使用 CreateFileMapping 进行 > 4Gb 分配,然后根据需要将内存映射到较小的空间块。使用页面文件为我节省了手动管理我自己的文件集以“交换”到的工作。)

附注。这个问题是由我最近阅读的一篇文章引发的:http : //blogs.technet.com/markrussinovich/archive/2008/11/17/3155406.aspx

memory winapi

5
推荐指数
1
解决办法
1274
查看次数

准确测量.NET中经过的挂钟时间

在.NET中准确测量经过的挂钟时间最方便的方法是什么?如果可能的话,我正在寻找具有微秒精度的东西(10 ^ -6秒).

.net performance

5
推荐指数
1
解决办法
877
查看次数

测量Linux上的CPU负载平均值(不包括磁盘负载)

Linux上的负载平均值(/proc/loadavg也由uptimetop等报告)是CPU和磁盘负载的度量:

来自man 5 proc:

   /proc/loadavg
          The first three fields in this file  are  load  average  figures
          giving  the number of jobs in the run queue (state R) or waiting
          for disk I/O (state D) averaged over 1, 5, and 15 minutes.  They
          are  the same as the load average numbers given by uptime(1) and
          other programs.  The fourth field consists of two numbers  sepa-
          rated  by a slash (/).  The first of …
Run Code Online (Sandbox Code Playgroud)

linux load linux-kernel

5
推荐指数
1
解决办法
595
查看次数