小编pau*_*doo的帖子

如何分析和优化XSLT?

我有一个XSLT用于在浏览器中查看XML文件.XSLT是天真的编写,目前需要很长时间才能执行(几分钟).

我的XML文件大小适中(~1 MiB),而执行不同处理的同一文档的其他XSLT执行速度要快得多.所以我知道问题不在于XML的大小,而是我的XSLT.

如何进行性能分析和优化我的XSLT?

(在浏览器中执行复杂的XSLT是一个坏主意吗?我应该改为应用XSLT应用程序吗?)

xslt optimization profiling

30
推荐指数
2
解决办法
1万
查看次数

我可以获得GNU make的第二个先决条件吗?

可能重复:
如何使用Makefile中的自动变量获取第二个依赖项文件?

我使用GNU make和我使用的自动变量,在$<,$^等我知道这$<仅仅是第一要义,并$^为所有的先决条件. 有没有办法获得第二个先决条件?

makefile gnu-make

27
推荐指数
1
解决办法
8930
查看次数

如何从磁盘获得良好的并发读取性能

我想问一个问题,然后用我自己的答案跟进,但也看看其他人有什么答案.

我们有两个大文件,我们想同时从两个独立的线程中读取.一个线程将顺序读取fileA,而另一个线程将顺序读取fileB.线程之间没有锁定或通信,两者都按顺序读取,并且两者都立即丢弃它们读取的数据.

我们在Windows上使用此设置的经验非常差.两个线程的组合吞吐量大约为2-3 MiB/sec.驱动器似乎花费大部分时间在两个文件之间寻找后退和前进,大概在每次搜索后读取很少.

如果我们禁用其中一个线程并暂时查看单个线程的性能,那么我们可以获得更好的带宽(此机器约为45 MiB /秒).很明显,糟糕的双线程性能是操作系统磁盘调度程序的假象.

我们可以做些什么来改善并发线程读取性能? 也许通过使用不同的API或以某种方式调整操作系统磁盘调度程序参数.

一些细节:

在具有2GiB RAM的机器上,文件大小为2 GiB.出于这个问题的目的,我们认为它们不会被缓存并完美地进行碎片整理.我们使用了碎片整理工具并重新启动以确保这种情况.

我们没有使用特殊的API来读取这些文件.这种行为可以在各种沼泽标准API中重复,例如Win32的CreateFile,C的fopen,C++的std :: ifstream,Java的FileInputStream等.

每个线程在一个循环中旋转,调用read函数.我们改变了每次迭代从API请求的字节数,从1KiB到128MiB之间的值.改变这一点没有任何影响,因此在每次磁盘搜索之后,OS实际读取的数量不是由这个数字决定的.这正是应该期待的.

单线程和双线程性能之间的巨大差异在Windows 2000,Windows XP(32位和64位),Windows Server 2003以及使用和不使用硬件RAID5时都是可重复的.

windows file-io multithreading

26
推荐指数
2
解决办法
7099
查看次数

如何使用"外部功能界面"从Go调用C

如何使用Go的"外部函数接口"调出C函数?

常见问题解答中提到了此界面,但我无法在文档的其他地方看到它.

c ffi go

26
推荐指数
1
解决办法
1万
查看次数

为什么我不能将类型参数显式传递给通用Java方法?

我已经定义了一个Java函数:

static <T> List<T> createEmptyList() {
    return new ArrayList<T>();
}
Run Code Online (Sandbox Code Playgroud)

调用它的一种方法是这样的:

List<Integer> myList = createEmptyList(); // Compiles
Run Code Online (Sandbox Code Playgroud)

为什么我不能通过显式传递泛型类型参数来调用它?:

Object myObject = createEmtpyList<Integer>(); // Doesn't compile. Why?
Run Code Online (Sandbox Code Playgroud)

Illegal start of expression从编译器中得到错误.

java generics syntax

24
推荐指数
2
解决办法
2万
查看次数

"log*"是什么意思?

O(log* N)在一本关于数据结构的书中遇到过这个术语.什么log*意思?我无法在Google上找到它,WolframAlpha 也不理解它.

big-o logarithm

24
推荐指数
3
解决办法
6652
查看次数

Clojure中的非尾递归匿名函数

如何在Clojure中创建递归匿名函数,而不是尾递归?

以下显然不起作用,recur仅用于尾递归函数.我也不愿意拖入y-combinator ..

((fn [n] (if (= 1 n) 1 (* n (recur (dec n))))) 5)
Run Code Online (Sandbox Code Playgroud)

recursion lambda clojure

24
推荐指数
1
解决办法
4005
查看次数

如何重命名DLL但仍然允许EXE找到它?

我们有一个内部生成的DLL,我们有相关的存根LIB.

我们还有一个EXE,它使用这个DLL使用静态链接到DLL的LIB文件的简单方法(即,不是手动使用LoadLibrary).

当我们部署EXE时,我们希望为了混淆原因(根据客户的要求)更改DLL文件名.

我们怎么能这样做,以便我们的EXE仍然自动找到DLL?

我已经尝试重命名DLL和LIB文件(在它们构建为正常名称后),然后将EXE项目设置更改为与重命名的LIB链接.这在运行时失败,因为我猜DLL的名称被烘焙到LIB文件中,而不是简单地通过链接器猜测".lib"替换为".dll".

一般情况下,我们不希望将此混淆应用于DLL的所有用途,因此我们希望保留当前DLL项目输出文件.

我希望有一种方法可以编辑DLL的LIB文件,并用其他东西替换DLL文件的硬编码名称.在这种情况下,这可以完全在EXE项目中完成(可能作为预构建步骤).


更新:我发现延迟加载不起作用,因为我的DLL包含导出的C++类.看到这篇文章.

还有其他选择吗?

windows dll native

22
推荐指数
5
解决办法
2万
查看次数

如何从嵌套循环中访问外部循环中的元素?

我嵌套了xsl:for循环:

<xsl:for-each select="/Root/A">
    <xsl:for-each select="/Root/B">
        <!-- Code -->
    </xsl:for>
</xsl:for>
Run Code Online (Sandbox Code Playgroud)

在内部循环中,如何从外部循环中的当前节点访问属性?

我一直在发现自己写这样的代码:

<xsl:for-each select="/Root/A">
    <xsl:variable name="someattribute" select="@SomeAttribute"/>
    <xsl:for-each select="/Root/B">
        <!-- Now can use $someattribute to access data from 'A' -->
    </xsl:for>
</xsl:for>
Run Code Online (Sandbox Code Playgroud)

这不能很好地扩展,因为有时我需要访问几条信息并最终为每个部分创建一个变量.有没有更简单的方法?

xslt scope for-loop

20
推荐指数
2
解决办法
2万
查看次数

在Clojure中获取一个callstack

当我运行我的Clojure程序并在执行期间出错时,我注意到REPL打印的消息只包含我执行的脚本中的顶级行号.我可以让它转储一个调用堆栈(它引用了Clojure代码的各种行号)吗?

例如:

user=> (load-file "test.clj")
java.lang.IllegalArgumentException: Wrong number of args (1) passed to: user$eval134$fn (test.clj:206)
user=>
Run Code Online (Sandbox Code Playgroud)

如果我知道的不仅仅是最高级别的电话会更好(第206行).

debugging callstack clojure

20
推荐指数
1
解决办法
4291
查看次数