经过几个小时的调试,我意识到一个非常简单的玩具示例由于缺少!表达式而效率不高return $ 1 + x(感谢 duplode!...但是 ghc 怎么不优化它??)。我也意识到了这一点,因为我将它与更快的 Python 代码进行比较,但我不会总是编写 Python 代码来对我的代码进行基准测试......
所以这是我的问题:有没有办法自动检测这些“懒惰的内存泄漏”,这会无缘无故地减慢程序的速度?我在优化 Haskell 代码方面仍然很糟糕,而且!很可能会忘记 a ,即使您有经验,我猜也是如此。
我知道:
+RTS -s,但我不知道如何解释它:看到79MB的内存为一个简单的程序似乎是巨大的,以我为例子,但也许它不是因为它是什么把我目前的计划......而更大的计划,这是不可能,只是检测我猜是这样的“惰性泄漏”,因为我不知道我的程序应该占用多少内存。cabal v2-run --enable-profiling mysatsolvers -- +RTS -p命令,但似乎使探查杀死由GHC做了一些优化技术,因此它很难使用这些值,真正的标杆。而且,我仍然不清楚如何从该输出中找到泄漏。例如,您能否向我解释如何在这样的玩具程序中找到“懒惰的泄漏”?
{-# LANGUAGE DerivingVia, FlexibleInstances, ScopedTypeVariables #-}
module Main where
--- It depends on the transformers, containers, and base packages.
--- Optimisation seems to be important or the NoLog case will be way to long.
--- $ ghc -O Main.hs
import …Run Code Online (Sandbox Code Playgroud) 为了理解为什么组件会在没有明显原因的情况下重新渲染,我启动了分析器。我可以看到我的组件重新渲染,因为Hook 18:
因此,为了理解这意味着什么,我尝试遵循这个问题中的建议What does the hook number in the Reactjs Dev tool irrespect to? 这基本上是说钩子列在相应的组件选项卡中。所以我去了\xe2\x80\xa6,但是我的钩子没有列在这里:最大钩子是15,而不是18!
\n\n知道我\xe2\x80\x99m 缺少什么吗?I\xe2\x80\x99m 确保我选择了正确的组件,因为同一组件两次都突出显示。
\n我希望能够在视频到达某些指定帧时稳健地停止视频,以便根据使用 Blender、Manim 制作的视频进行口头演示...
我知道这个问题,但问题是视频没有完全停在好帧处。有时它会继续前进一帧,当我强制它返回到初始帧时,我们会看到视频向后退,这很奇怪。更糟糕的是,如果下一帧完全不同(不同的背景......),这将非常明显。
为了说明我的问题,我在这里创建了一个演示项目(只需单击“下一步”即可看到当视频停止时,有时会倒退)。完整的代码在这里。
我正在使用的代码的重要部分是:
var video = VideoFrame({
id: 'video',
frameRate: 24,
callback: function(curr_frame) {
// Stops the video when arriving on a frames to stop at.
if (stopFrames.includes(curr_frame)) {
console.log("Automatic stop: found stop frame.");
pauseMyVideo();
// Ensure we are on the proper frame.
video.seekTo({frame: curr_frame});
}
}
});
Run Code Online (Sandbox Code Playgroud)
到目前为止,我通过在结束前停止一帧然后使用seekTo(不确定这听起来如何)来避免这个问题,如此处所示。但正如您所看到的,有时当进入下一帧时,它会有点“冻结”:我想这是在seekTo.
PS:如果你知道 JS 中一种可靠的方法来了解给定视频的帧数,我也很感兴趣。
关于在桌面上预先剪切视频的想法,可以使用......但我过去在这方面有过不好的经验,特别是更改视频有时会产生一些故障。此外,它的使用可能会更复杂,这意味着视频应该手动剪切很多时间,重新编码......
编辑是否有任何解决方案,例如基于WebAssembly(与旧浏览器更兼容)或Webcodec(更高效,但尚未广泛传播)?Webcodec 似乎允许非常令人惊奇的事情,但我不知道如何使用它们。我很想听到基于它们的解决方案,因为 Firefox 尚不处理 webcodec。请注意,如果在此过程中音频不会丢失,那就太好了。如果我还可以根据要求显示控件,那就太好了。
编辑:我不确定这里发生了什么( …
在 Lineage OS 上(也许在任何 Android 上?),可以更改默认的 WebView 渲染(默认设置为AOSP Browser,即没有 GAPPS 的默认 Android 浏览器)。当我安装 Chrome 时(即使没有安装 GAPPS),我可以Chrome在设置/开发中将此默认值更改为(这对我来说很实用,因为默认浏览器有一些烦人的错误)。
是否也可以使用 Firefox 的引擎而不是浏览器/Chrome(我不想安装 Chrome 并依赖专有软件)?仅安装 Firefox(FDroid 上的 Fennec)还不够。
谢谢!
我想编写一个可以在两种“模式”下运行的代码:
我尝试编写以下代码,它创建了两个 Writer,一个普通的(用于日志记录模式)和一个愚蠢的(不记录任何内容,用于高效模式)。然后我定义了一个新类LogFunctionCalls,允许我在这两个 Writer 之一中运行我的函数。
但是,我尝试使用 Stupid writer 比较代码的速度,它比没有 writer 的普通代码要慢得多:这里是分析信息:
StupidLogEntry:总时间 = 0.74 秒,总分配 = 600,060,408 字节(注意:实际时间远大于 0.74 秒...)LogEntry:总时间 = 5.03 秒,总分配 = 1,920,060,624 字节这是代码(您可以根据要使用的运行进行评论):
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
--- It depends on the transformers, containers, and base packages.
--- You can profile it with:
--- $ cabal v2-run --enable-profiling debug -- +RTS -p
--- and a file debug.prof …Run Code Online (Sandbox Code Playgroud) 我正在 github 上创建一个库,所以我为此使用了一个 Markdown 文件,其结构如下:
# My main title
## My first section
...
## My second section
...
Run Code Online (Sandbox Code Playgroud)
但不幸的是,当我使用 pandoc 将此文档转换为 Latex 时:
pandoc README.md --number-sections -f markdown -t latex -s -o doc.tex
Run Code Online (Sandbox Code Playgroud)
文档没有任何标题,编号从主标题开始:
1. My main title
1.1. My first section
...
1.2. My second section
...
Run Code Online (Sandbox Code Playgroud)
虽然我想要类似的东西
My main title <=== document title
1. My first section
...
2. My second section
...
Run Code Online (Sandbox Code Playgroud)
我当然可以使用 sed 将所有 ## 更改为 #,并将主标题替换为,% Document My main title但对我来说它看起来很脏。什么是继续的好方法?
谢谢!
我正在尝试循环遍历由字符串描述的组件列表(我从另一个 获取组件的名称,例如const componentTreeName = ["CompA", "CompA"].
我的代码很简单:
<script setup>
import CompA from './CompA.vue'
import { ref } from 'vue'
// I do NOT want to use [CompA, CompA] because my inputs are strings
const componentTreeName = ["CompA", "CompA"]
</script>
<template>
<h1>Demo</h1>
<template v-for="compName in componentTreeName">
<component :is="compName"></component>
</template>
</template>
Run Code Online (Sandbox Code Playgroud)
编辑
我尝试过但没有取得多大成功。
haskell ×2
android ×1
github ×1
html5-video ×1
javascript ×1
latex ×1
lineageos ×1
markdown ×1
memory-leaks ×1
optimization ×1
pandoc ×1
performance ×1
react-hooks ×1
reactjs ×1
video ×1
vue.js ×1
vuejs3 ×1
webassembly ×1
webcodecs ×1
writer ×1