@老虎会游泳,上一楼,想每段隔多几行回复来着。咋连续多行,被压缩成一行了。。
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 秒- 手动开 64KB 缓冲区,每次
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
吗?
@老虎会游泳,老虎觉得 10 楼的想法,技术上有可能吗?
P/B 帧只是依赖前面已解码帧(如 I 帧)解码后的画面吗?
@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 抖币?