小编And*_*rew的帖子

使用Union and Select时,LINQ不会在我的IEnumerator上调用Dispose,这是预期的行为还是bug?

我的理解是,LINQ IEnumerable扩展应该在IEnumerable产生的IEnumerator上调用Dispose。在SO上看到这个答案。但是,我在实践中没有看到。其他答案是否正确,还是我在LINQ中发现错误?

这是使用Mono发行的发行品的最低限度的复制。它还在Dotnet Core 2.1和2.2中进行了复制。

using System;
using System.Threading;
using System.Linq;
using System.Collections.Generic;
using System.Collections;


namespace union
{
    class MyEnumerable : IEnumerable<long>
    {
        public IEnumerator<long> GetEnumerator()
        {
            return new MyEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

    class MyEnumerator : IEnumerator<long>
    {
        public long Current
        {
            get
            {
                return 0;
            }
        }

        object IEnumerator.Current
        {
            get
            {
                return Current;
            }
        }

        public bool MoveNext()
        {
            return false;
        }

        public void Reset()
        {
            return; …
Run Code Online (Sandbox Code Playgroud)

c# linq

8
推荐指数
1
解决办法
97
查看次数

pg_column_size 报告 table.* 的大小与特定列的大小差异很大

我有一个简单的例子,其中 pg_column_size 报告的值截然不同。我认为这与是否考虑 TOAST 值有关,但我不确定。这是设置:

CREATE TABLE foo (bar TEXT);
INSERT INTO foo (bar) VALUES (repeat('foo', 100000));
SELECT pg_column_size(bar) as col, pg_column_size(foo.*) as table FROM foo;
Run Code Online (Sandbox Code Playgroud)

我在 Postgres 9.6 中看到的是,

col     table
3442    300028
Run Code Online (Sandbox Code Playgroud)

这里有一个数量级的差异。想法?我计算行大小的正确方法是什么?我的一个想法是,

SELECT pg_column_size(bar), pg_column_size(foo.*) - octet_length(bar) + pg_column_size(bar) FROM foo;
Run Code Online (Sandbox Code Playgroud)

这应该减去后 TOAST 大小并添加 TOAST 大小。

编辑:我建议的解决方法仅适用于字符列,例如不适用于 JSONB。

postgresql

5
推荐指数
1
解决办法
2035
查看次数

加速“apt-get update”以加速 Docker 镜像构建

我想添加curl到 Docker 映像,并且我在 Dockerfile 中使用以下命令来执行此操作:

RUN apt-get update
RUN apt-get install curl ca-certificates -y
Run Code Online (Sandbox Code Playgroud)

我的问题是初始更新需要相当长的时间才能运行(2 分钟),因此当我调试 Dockerfile 时,迭代速度很慢。特别是当我在 之前进行更改时RUN apt-get update,这会使 Docker 的图像缓存失效。

有没有什么方法可以更有选择性apt-get update,因此它只更新足以索引下载位置curl?或者我可以使用其他一些技术来加速我的 Docker 构建?

这是整个 Dockerfile,

FROM postgres:9.6.10
ADD data/tsvs.tar.gz /standard_data
COPY postgres/*.sql /docker-entrypoint-initdb.d/

RUN apt-get update
RUN apt-get install curl ca-certificates -y
RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
RUN apt-get install postgis postgresql-9.6-postgis-scripts -y
Run Code Online (Sandbox Code Playgroud)

我目前正在对 postgres/*.sql 中的 SQL 文件进行更改,因此缓存失效。

apt docker

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

apt ×1

c# ×1

docker ×1

linq ×1

postgresql ×1