c# - 优化霍夫曼表符号检索(顺序和渐进 JPEG)
问题描述
是否可以对以下 LINQ 查询进行进一步优化,您可以在其中看到我进行了交易
HuffmanTable.SymbolObject[] objects = hTable.Symbols.Where(x => x.Bits == i + 1).ToArray();
为了
var objects = hTable.Symbols.Where(x => x.Bits == i + 1);
我不确定我还能做些什么来加快霍夫曼代码查找速度。
在 Release 中处理 10 次扫描渐进式 707x707 JPEG 大约需要 1.157 秒,而对于 1920x1080 jpeg 则需要 4 秒。GetNextSymbol 是代码中最大的瓶颈。
HuffmanTable.SymbolObject GetNextSymbol(BitReader b, HuffmanTable hTable) {
b.LastPositionBeforeGetSymbol = b.Position;
uint currentCode = 0;
for (uint i = 0; i < 16; ++i) {
var c = b.ReadBit();
if (c == null)
{
return new HuffmanTable.SymbolObject()
{
Symbol = (int)currentCode,
Code = 0,
CodeString = null
};
//return null;
}
int bit = c.ValueByte;
if (bit == -1) {
return null;
}
currentCode = (uint)((currentCode << 1) | (uint)bit);
//HuffmanTable.SymbolObject[] objects = hTable.Symbols.Where(x => x.Bits == i + 1).ToArray();
var objects = hTable.Symbols.Where(x => x.Bits == i + 1);
int j = 0;
foreach(var obj in objects)
{
if (currentCode == obj.Code)
{
return obj;
}
}
}
Console.WriteLine("*** COULD NOT FIND CODE *** {0}:{1}", currentCode, Convert.ToString(currentCode, 2));
return null;
}
解决方案
推荐阅读
- javascript - javascript未定义错误-从表单中获取值
- proxy - HAProxy 没有这样的 ACL:'ssl_fc'
- r - ggplot2 & gridExtra:减少地块之间的空间,但保留一个地块的 ylab
- javascript - Angular 6触发点击事件,如jQuery
- mysql - Mysql通过分组计算不同的列
- javascript - SOAP-Request 与 PHP 一起工作,但在 NodeJS 中抛出语法错误
- scala - 使用 slick 静默删除可为空的数据库列
- javascript - 如何简化我的游戏敌人生成算法?(包括代码片段)
- soapui - SoapUi 响应的断言检查
- three.js - 三.js+二维码扫描