c# DataSet.Fill Firebird 2.5 可怕的性能问题

2023-12-06

REMARK我完全重写了这个问题,因为在探索选项和获得见解时,我意识到问题的根源根本不是我想象的那样。

我使用 Firebird 作为数据库引擎和标准 .Net 提供程序(v.5.11.0)来使用以下代码获取数据:

// myBlob1 is BLOB SUB_TYPE 1 (text field) with some empty, but some
// VERY long stuff (xml-content) which exceeds VARCHAR(32765), but I removed
// those before performing my tests!!!
var tick = Stopwatch.StartNew();
DataTable dataTable = new DataTable();      
DbLive.Open();
FbCommand command = new FbCommand("SELECT myBlob FROM MY_TABLE", DbLive);
try {
    dataTable.BeginLoadData();
    FbDataAdapter fda = new FbDataAdapter(command);
    fda.Fill(dataTable);
    dataTable.EndLoadData();
}
command.Dispose();
DbLive.Close();
tick.Stop();
Console.WriteLine("Execution time: " + tick.ElapsedMilliseconds + " [ms]");

我正在获取大约 30k 行,总共大约 16Mb 的数据(根据数据库工作台的统计数据),但只有 20k 行包含非空数据。

所以我用简单的方法获取整个内容,然后我使用了cast (VARCHAR(8192))方法(请注意,在进行测试之前,我删除了所有包含 > 8192 个字符的行)。现在,结果如下:

// Obtained when loading data over wifi, with a bandwidth of about 100Mbps)
// the performance on local machine did not make a big difference!)
No casting:  73287.0788 ms
With casting: 2360.2244 ms

确实有什么不好的事情发生Blobs这里。我使用 Firebird 3 和压缩测试了性能,但结果并没有好多少(改进很小,但差异仍然是相同的数量级)。

重点是: 1. 如果我使用其他提供商(例如www.ibprovider.com按照建议,但我无法测试) 2. 这是其他数据库引擎的已知问题吗?或者是否有希望通过更换其他引擎来获得改进?


我对上面的很多事情有点困惑,所以让我澄清一些见解:

  1. FbDataReaderDapper事实上,方法确实没有加载 blob 字段,因此性能确实无关紧要;

  2. 使用CAST to VARCHAR(4096)确实显示出显着的性能改进(请注意,在这里,我测试了文本 blob 的内容以完全匹配,这确实有效):

    数据表未转换:73287.0788 ms

    FbDataReader 转换:2224.1387 毫秒

    数据表转换:2360.2244 ms

我什至尝试使用 Firebird 3 进行压缩,但没有显着的改进。所以这确实是我使用的事实BLOB而不是大VARCHAR这导致了问题。

请注意,我没有成功地与其他提供商进行测试。

底线:使用BLOB SUBTYPE 1在这里破坏了我的表现,我应该使用VARCHAR反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c# DataSet.Fill Firebird 2.5 可怕的性能问题 的相关文章

随机推荐

  • 为什么不能将供应商特定的伪元素/类组合到一个规则集中?

    在 CSS 中可以设置样式placeholder使用特定于供应商的伪类和伪元素的组合来输入输入中的文本 以获得最佳的跨浏览器覆盖率 这些都共享相同的基本属性 即 文本样式和颜色声明 然而 虽然我不可避免地想要应用相同的样式 而不管浏览器供应
  • Android 可绘制,背景和渐变位于左侧

    W 希望有一个drawable左边有背景和渐变 大约是10dp wide 我想要实现的目标的图片 左侧红色渐变 其余部分的背景 我怎样才能做到这一点 我试过了layer list有两种形状但没有运气 项目背景
  • Python:在随机段落中查找最长/最短的句子?

    我使用的是 Python 2 7 需要 2 个函数来查找最长和最短句子 按字数计算 随机段落 例如 如果我选择放入这一段 将您的海滨度假之旅与北加州詹纳葡萄酒之乡的红葡萄酒和白葡萄酒搭配起来 这座位于索诺玛县的沿海小城市坐落在俄罗斯河河口附
  • 使 chrome 中的复选框看起来像 IE 中的复选框

    IE 和 Chrome 中的复选框看起来不同 Chrome IE 从上面的图片中您可以看到差异 我希望 chrome 中的复选框看起来与 IE 中的一样 I tried webkit box shadow和其他类似的 css 属性 但没有运
  • UISegmentedcontrol 外观导致问题

    我需要有关 UISegment 外观的帮助 我在我的应用程序委托中设置了它 一切正常 直到我添加此代码来更改我选择的段颜色 它才引起问题 我在 viewDidLoad 时调用了 IBAction 它应该显示这个 但它显示了这一点 我知道是外
  • TCP服务器IP地址

    当启动H2 tcp服务器并且主机有多个IP地址时 我如何定义服务器将绑定以侦听连接的IP 我们可以定义 tcp 端口 但似乎没有办法定义 ip 地址 谢谢你 奥斯卡 http www h2database com html advanced
  • QueryOver:从子查询中选择列

    如何从不同表的子查询中选择 投影值到我的主查询中 我有一个像这样的 NH 模型 Serializable public class MyModel public virtual int Id get set more mapped valu
  • 在 sed 中查找并替换文本文件中的多个字符串[重复]

    这个问题在这里已经有答案了 下面是一个玩具文本文件 其中包含样本和特征信息以及测量值 Sample3 trait1 8 5 Sample6 trait2 2 2 Sample7 trait1 9 2 Sample3 trait2 1 3 S
  • 向空手道框架添加自定义步骤定义

    我需要提取从 复杂 响应标头解析的字段 并在稍后的测试中使用该值 看来空手道中的 header 关键字是为了设置请求头而设置的 而不是解析响应头 有没有办法添加自定义步骤定义来维护对场景变量存储的访问 看来变量存储在StepDefs类 并且
  • 从小写转换为大写

    我正在尝试从小写转换为大写 我知道这很容易做到 SUB AL 20H 但我得到了另一种解决方案 AND AL 0DFH 请帮助我理解这一点 谢谢 查看位模式 答 0x41 0100 0001 一个 0x61 0110 0001 中号 0x4
  • 如何在 Three.js 中获取蒙皮网格顶点的全局位置?

    在 Three js 中 我们现在能够获取 a 顶点的全局位置不带皮的网格感谢这个问题 但是我怎样才能获得 a 顶点的全局位置skinned与骨骼和变形目标进行网格划分 例如 如何打印 2 5 1 5 0 5 在以下情况下 mesh geo
  • 注意:如果您发送了值,则被调用的函数应该是付费的,并且您发送的值应该小于您当前的余额

    我正在尝试使用 openzeppelin 的 ERC20 实现 但出现错误 tokenAddress 是现有 ERC20 代币的地址 例如 USDC 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 im
  • 在 PIL 中使用 TIFF G4 图像

    我编写了一个纯 python TIFF G4 解压缩以供使用tifffile py 我知道有一些方法可以添加libtiff自定义 PIL 但我永远无法让它在混合 virtualenv 中很好地工作 我想在PIL中操作图像 我正在寻找将我的减
  • 没有端口的 HTTP X 转发主机行为

    我发现X Forwarded Host对于端口而言 HTTP 标头没有很好地定义 也许这就是为什么不同的实现在涉及这个标头时表现不同的原因 通常 此标头可以包含端口 例如b com 123这很简单 但如果真的发生了怎么办NOT包含端口并且服
  • Swift:IOS7 设备上的核心数据 -> 第二个实体上的entityForName 为零

    我已经使用 Xcode 6 beta 2 在一个小型 iPhone 项目上测试了 swift 该项目使用核心数据来访问数据模型中的 2 个实体 用户 合同 在 IOS 模拟器中一切正常 问题 当我为 IOS7 构建应用程序并在 iPhone
  • 请参阅场景大纲示例中定义的变量[重复]

    这个问题在这里已经有答案了 Feature Test Type Background url host def name test name def label name Scenario Outline Test 2 Given url
  • 判断两个矩形是否重叠?

    我正在尝试编写一个 C 程序 它接受用户的以下输入来构造矩形 2 到 5 之间 高度 宽度 x 位置 y 位置 所有这些矩形都将平行于 x 和 y 轴存在 即它们的所有边都将具有 0 或无穷大的斜率 我试图实现中提到的内容this问题 但我
  • 是否可以声明一个同时适用于数字和 bigint 的打字稿函数?

    在普通的无类型 JavaScript 中 编写一个可以对数字或 bigint 进行操作的函数并不难 具体取决于传入的参数 const sumOfSquares a b gt a a b b sumOfSquares 3 4 returns
  • DynamoDB 突发容量和自适应扩展

    我正在浏览 AWSblog从那里开始AWS re Invent 视频了解 DynamoDB 的自适应扩展和突发概念 我理解WCU和RCU的概念 以及突发桶堆积长达300秒的想法 并且分区的峰值WCU RCU是1000 3000 视频开始时间
  • c# DataSet.Fill Firebird 2.5 可怕的性能问题

    REMARK我完全重写了这个问题 因为在探索选项和获得见解时 我意识到问题的根源根本不是我想象的那样 我使用 Firebird 作为数据库引擎和标准 Net 提供程序 v 5 11 0 来使用以下代码获取数据 myBlob1 is BLOB