这位用户还没有留下个人签名。
@老虎会游泳,为啥我上传 .svgz(压缩过的 .svg),无法显示呢。。
@ashklxvne99660,这是其他厂商这两年宣传的《内存扩展》吗?
@ashklxvne99660,没 Root 权限,有 Linux 程序可以用 < 1024 的端口吗。。
@烟雨,Google 的 reCaptcha 呢?或者 CF 盾?
@老虎会游泳,上一楼,想每段隔多几行回复来着。咋连续多行,被压缩成一行了。。
std::cin >> word这个io可能比较慢
确实,我改成 std::getline(std::cin, word) 后,就由 28 秒 → 25 秒了。
你可以自行统计一下分段用时,看看输入、计算和输出各占比多少。
我简单测了测,读取 1 亿 15 长度字符串用时。
std::cin >> word:5.1 秒std::getline(std::cin, word):2.2 秒std::cin.read() 填充,std::memchr 找 \n,str.append() 构造:1.4 秒感觉输入上,这速度也可以了。
而且,我 strace 了一下 DuckDB,它也是要读到缓冲区里的,且缓冲区贼大,32MB。。且一定要填充完整 32MB,才干活。。

怪不得我说,一边解压大文本/脚本实时生成内容,一边喂给 DuckDB,怎么耗时会变长。。明明 writer 产生内容的速度还挺快的呀。。

也许输入输出是大头(因为stdio是同步锁定的)
我取消与 stdio 同步了:std::ios::sync_with_stdio(false);。
这个确实很耗时间。不取消的话,总时间直接翻倍。。
把文件mmap到内存然后使用
char*指针直接访问
如果想解压大文本,再通过管道喂给程序时,好像不能 mmap 了吧。。
@老虎会游泳,DuckDB 也设成单线程的了。对比起来应该算公平的?
DuckDB 双线程时 14 秒,3+线程爆(笔记本 8GB 板载)内存了。。

老虎看这代码,有啥不合理的地方,才拖累性能,打不过 DuckDB 吗?

@tasy5kg,对了,我有一些 HEVC 视频(假设都是 30 fps,1h 的视频),但仅开头处有 1 个 I 帧,其余全是 B 帧,导致无法随意拖动进度条。
你知道,如何每 10 秒,重编码一个 B 帧为 I 帧(仅需重编码 360 帧 ),而不是全部重编码(要重编码 10.8W 帧),来修复视频吗?


@tasy5kg,看了看文档,libsvtav1 确实只支持 8/10 bit。。
但 avifenc 支持 12 bit。我搜索论坛里的 mp4 文件,选了其中三个,试了试转成动图,确实 12 bit 能比 8 bit 再小 20% 左右。

转码脚本(Windows 下可用 600KB 的 busybox-w32 来运行,要求 PATH 处能找到 ffmpeg、avifenc):
speed=5
quality=50
for file in *.mp4; do
for depth in 8 10 12; do
ffmpeg -v quiet -i "$file" -strict -1 -pix_fmt "yuv420p$( [[ $depth == 8 ]] && echo '' || echo "${depth}le" )" -f yuv4mpegpipe - |
avifenc -q "$quality" -s "$speed" --min 0 --max 63 --stdin "${depth}bit_${speed}s_${quality}q_${file%.*}.avif"
done
done
文件所在帖子:
@tasy5kg,诶,K40 不是天生支持 HEIF 吗?直接用这个,压缩率就能挺高了的吧?
另外,尝试 12bit 了吗?体积有进一步下降吗?
@tasy5kg,另外,好像 webp、HEIF、AVIF,都支持动图?
@tasy5kg,我的意思是,AVIF 也是 AV1 编码的。
说不定你转视频时,也用 12bit,会发现体积又瞬间小一些了呢?(好像有 20% ?)
@tasy5kg,以前我转 AVIF 照片时,意外发现,像素格式是 12bit 的话,体积会比 8bit、10bit 下降很多。。
但是 Windows 只支持 8bit 的。。
@胡椒舰长,只是 UBB 解析?
还是 UBB 和 Markdown 混合解析?
@echo醉老仙,那就是,按照发件人分组,取最后发消息时间、消息总数?
SELECT MAX(time) AS 最新一条消息时间, COUNT(*) AS 该发件人历史消息数
FROM News
WHERE 收件人ID = 自己 AND del = 0
GROUP BY 发件人ID
@echo醉老仙,是说,根据聊天对象分组,并显示最后消息时间?
打开与某人的聊天界面时,则按时间显示所有历史记录?
@echo醉老仙,意思是《如何从 News 表中,找出 fid=x, sid=y, del=0, time 最大 的一条数据》吗?
若是,这样好像简单些?(需要 sid、fid、del、time 索引)
SELECT id
FROM News
WHERE fid=x, sid=y, del=0
ORDER BY time DESC
LIMIT 1
@没落的情绪,好像骁龙 845 的二手安卓,也才两三百?
@没落的情绪,有啥性能好的小主机吗?
@胡图图,好像虚拟物品比安卓贵 43%?
比如,安卓抖音 1 元能买 10 抖币,苹果只能买 7 抖币?
@老虎会游泳,老虎工作中要用到 C++20 了吗?这么新。。
感觉 C/C++ 这种与硬件底层打交道的语言,现在都在很努力地建立与硬件隔离的抽象概念层……
现在 ChatGPT 好傻。。
@Monica,写了个一分为二的供参考(一分为六也类似的):
ffmpeg -i 输入.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[p1];[0]crop=iw/2:ih:iw/2:0[p2]" -map "[p1]" -map 0:a 输出_左边.mp4 -map "[p2]" -map 0:a 输出_右边.mp4
@老虎会游泳,好像有点接近,等会儿去看看用法。先谢谢老虎
CSS 选择器、xpath 我都用过,对于提取单独几条挺好用的。
但是批量提取整个页面的数据,就麻烦多了。
所以想着有没有验证 HTML 结构的同时,还能提取出内容的。
页面结构很动态,目前我只能靠验证来确定:
有可能会出现什么元素,不遗漏元素,也不误解元素含义(比如老虎林首页,还有可能出现 [公开]、[被下沉]、[评论关闭] 之类的)
防止日后结构变化时不自知