- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要遍历存储库的提交并为每次提交获取受影响的文件。这是我目前巨大的性能瓶颈。
我有一个 libgit 函数的 C++ 包装器,但这段代码应该足够容易理解。
std::vector<std::string> Commit::getAffectedFiles() const {
git_tree* tree = nullptr;
git_tree* tree2 = nullptr;
int error = git_commit_tree(&tree, get());
throw_on_error(error);
try {
error = git_commit_tree(&tree2, parent(0).get());
} catch (GitException e) {
tree2 = nullptr; // probably initial commit
}
git_diff* diff = nullptr;
git_diff_tree_to_tree(&diff, getRepo(), tree2, tree, 0);
std::vector<std::string> ret;
git_diff_foreach(diff,
[](const git_diff_delta* entry, float progress, void* payload) {
std::string str = entry->old_file.path;
((std::vector<std::string>*)payload)->push_back(str);
return 0;
}, nullptr, nullptr, nullptr, &ret);
git_tree_free(tree);
git_tree_free(tree2);
git_diff_free(diff);
return ret;
}
我只能希望我在这里做了一些根本性的错误。
例如
git log --stat > /dev/null
速度更快,并且提供相同的信息。
perf 按顺序报告 git__strncmp
、git_buf_rfind_next
和 git_tree__parse
的大部分使用情况。
我知道这是 IO 繁重的,但我没有看到减少它或并行运行它的简单方法。
最佳答案
这相当于 git 内部所做的,尽管 git 本身有更多的人关注它的性能,而 libgit2 在这方面的投资几乎没有那么多。
然而,一些补丁[0] 最近被 merge 到 libgit2 的 master
分支中,这可以减少多达 40% 的树解析时间。我建议尝试一下,看看你得到了什么数字(这些补丁也应该很容易向后移植到早期版本)。
还要考虑到你的 git 版本很可能是在 Release模式下编译的,而 libgit2 默认情况下是在 Debug模式下构建的,所以如果你还没有激活 Release模式,请使用 -DCMAKE_BUILD_TYPE=Release
。这也显着加快了这些解析操作。
关于c++ - libgit : Fastest way of fetching files in a commit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34157047/
idx info market po side odd unique_odd 10 927606 OU_OT 2.5 under 2.01 927606_OU
我需要删除字符串中的所有额外空格。我使用正则表达式来匹配字符串和匹配的字符串,我用其他一些替换。为了更好地理解,请参阅以下示例: 3个输入字符串: Hello, how are you? Hello
我正在尝试: python3 -m timeit -c 'len("".join([str(x) for x in range(0, 999999)]))' 10 loops, best of 3:
我需要在 Java 中比较实例"file"的两个不同文件,并希望使用快速哈希函数来完成此操作。 想法:- 散列文件 1 中的前 20 行- 散列文件 2 中的前 20 行- 比较两个哈希值,如果相等则
我需要最快和最简单的算法来找到数组中的重复数字,还应该能够知道重复的数量。 例如:如果数组是{2,3,4,5,2,4,6,2,4,7,3,8,2} 我应该能够知道有四个 2、两个 3 和三个 4。 最
MPIR 是一个非常好的库,我目前在 C++ 中使用它来处理大量数据。不幸的是,它没有任何日志功能。因此,我正在寻找 MPIR 的 mpz_class 的快速日志功能。 我们都很清楚,C++中已经提供
假设我需要将数组转换为对象,并在此过程中进行一些过滤。 我有两种方法,一种是可链接的函数方法,例如 .map、.filter 和 .reduce,另一种是循环带有老式for循环的数组并改变一个对象。
以下代码是有效的 Swift 代码,并且在禁用优化时可以正确编译。 protocol Foo { var bar: String { get set } } class BaseFoo: Fo
我的页面上有一个多级导航菜单,其中包含一个无序列表。该列表具有 menu 类,如下所示: Category 1 Category 2 Category 3
这个问题在这里已经有了答案: How to Flatten a Multidimensional Array? (30 个答案) 关闭 3 个月前。 有没有什么快速的方法可以在不运行 foreach
我有一个非常奇怪的问题。我在我的应用程序中对 NSDictionary 对象数组进行排序,但只有当应用程序从 Xcode 运行时它才能正常工作。一旦我分发应用程序并在设备上安装和运行它,排序就不再有效
我通常按以下方式在 Java 中创建一个字符串: String foo = "123456"; 但是,我的讲师坚持要我使用 format 方法形成一个字符串,如下所示: String foo = St
要将一个数字乘以 2 的任意倍数,我将对其进行多次移位。 有没有这样的技术可以在更少的周期内将数字乘以 10? 最佳答案 80286 没有桶形移位器,这是随 80386 一起引入的。根据 Micros
要将一个数字乘以 2 的任意倍数,我将对其进行多次移位。 有没有这样的技术可以在更少的周期内将数字乘以 10? 最佳答案 80286 没有桶形移位器,这是随 80386 一起引入的。根据 Micros
我们可以使用 getchar_unlocked 通过操作字符来快速读取标准输入中的整数: int scan_d() { int ip = getchar_unlocked(), ret = 0
哪些代码会更快(或更好): $this->db->set('date', 'NOW()', FALSE); 或 $data['date'] = date('Y-m-d H:i:s'); 最佳答案 一般
所以我有 2 个矩阵:每个都是 100x100。 我正在寻找计算第 3 个矩阵,使得:M3[i]=sqrt(M1[i]^2 + M2[i]^2)。 我显然可以执行 ForLoops,但我确信还有更快的
我想在 shell 中反转一个数字。我的数字值只有 2 个可能的值:1 和 0。如果我的数字是 1,我想反转为 0,如果它是 0,我想反转为 1 什么操作可以更快? 1)操作1:使用if语句 if [
我正在从非 SSL 来源加载一些图像。为了不破坏我的 SSL 证书,我必须通过这个简单的 PHP 代理页面加载它们: 这可行,但不幸的是我的加载时间很慢。 有人知道代理图像的更快方法吗? 谢谢大家!
我正在为比赛编写程序,我需要比所有其他参赛者都快。为此,我需要一些算法帮助;理想情况下,我会使用最快的算法。 对于这个问题,我得到了两件事。第一个是元组列表,每个元组恰好包含两个元素(字符串),每个元
我是一名优秀的程序员,十分优秀!