小编Eri*_*tta的帖子

是否可以使用 RECORD 参数编写多态 Postgres 函数?

我想编写一个 PL/pgSQL 函数,它可以获取不同类型的记录,检查提供的记录类型,然后对记录执行某些操作。例子:

CREATE FUNCTION polymorphic_input(arg_rec RECORD) RETURNS TEXT LANGUAGE plpgsql AS
$plpgsql$
BEGIN
  IF pg_typeof(arg_rec)::text = 'information_schema.tables' THEN
    RETURN (arg_rec::information_schema.tables).table_name;
  ELSIF pg_typeof(arg_rec)::text = 'information_schema.columns' THEN
    RETURN (arg_rec::information_schema.columns).column_name;
  ELSE
    RETURN 'unknown';
  END IF;
END;
$plpgsql$;
Run Code Online (Sandbox Code Playgroud)

当您使用表中的一行调用该函数时information_schema.tables,它应该返回表的名称,当您像这样调用它时它会返回表的名称:

-- this returns table name "pg_type"
SELECT polymorphic_input((SELECT t FROM information_schema.tables t WHERE table_name = 'pg_type' LIMIT 1));
Run Code Online (Sandbox Code Playgroud)

当您使用表中的一行调用该函数时information_schema.columns,它应该返回列的名称,当您像这样调用它时它会返回列的名称:

-- this returns column name "objsubid"
SELECT polymorphic_input((SELECT t FROM information_schema.columns t WHERE t.column_name = 'objsubid' LIMIT 1));
Run Code Online (Sandbox Code Playgroud)

问题是您不能使用不同的行类型连续两次调用该函数。例如,如果您使用 row …

postgresql

6
推荐指数
1
解决办法
555
查看次数

Xamarin Android垃圾收集算法

我正在阅读Xamarin.Android垃圾收集文档,关于通过减少引用的实例来帮助GC更好地执行.

该部分首先说:

每当在GC期间扫描Java.Lang.Object类型或子类的实例时,也必须扫描实例引用的整个对象图.对象图是"根实例"引用的对象实例集,以及根实例引用的所有内容,递归地引用.

......我明白了.

然后它将显示继承自标准Activity类的自定义类.此自定义活动类有一个字段,该字段是在构造函数中初始化为具有10,000个字符串的字符串列表.据说这很糟糕,因为在GC期间必须扫描所有10,000个实例的可达性.我也理解.

我不清楚的部分是建议的修复:它说该List<string>字段应该移动到另一个不继承的类,Java.Lang.Object然后该类的实例应该从活动中引用,就像引用列表一样之前.

我的问题:当实例总数仍为10,000时,如何将字段深入到对象图中有助于GC,并且开头段落表示最终会扫描它们,因为该过程是递归的?

作为旁注,我也在(在这里)阅读Mono在Android上使用的SGen GC,并且对象图遍历过程被描述为从GC根开始的广度优先.这解释了10,000项目列表如何在检查每个项目时导致更长的GC暂停,但仍然没有解释如何将该列表更深入地移动到图形中将有所帮助,因为GC会在深入到图形时最终扫描它.

mono android garbage-collection xamarin.android xamarin

4
推荐指数
1
解决办法
1194
查看次数