我的理解是,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) 我有一个简单的例子,其中 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。
我想添加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 文件进行更改,因此缓存失效。