小编EM0*_*EM0的帖子

在Windows上删除名为"NUL"的文件

我在Windows 7上运行了一个在Cygwin下编译的程序,并将"NUL"作为输出文件名传递.它实际上在当前目录中创建了一个名为"NUL"的文件,而不是抑制输出.(显然它预计"/ dev/null",即使在Windows上也是如此.)现在我坚持使用这个我无法删除的"NUL"文件!

我已经尝试过了:

  • Windows资源管理器 - 错误:"无效的MS-DOS功能"(是的,这是严重的说法!)
  • 使用"del NUL"命令提示符 - 错误:"文件名,目录名称或卷标语法不正确."
  • 删除整个目录 - 与删除文件相同的交易
  • remove() 在C程序中 - 也失败了

我怎样才能摆脱这些NUL文件(我现在有几个),没有安装完整的Cygwin环境并在Cygwin下编译C程序来完成它?

c windows null cygwin

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

在.NET应用程序中预分配(保证)内存

是否有可能.NET 3.5应用程序告诉.NET运行时:"嘿,我稍后会使用n MB内存,所以请现在提交那么多或现在失败?"

这个的上下文是:我有一个C#控制台应用程序,它运行一个返回大量数据的数据库查询,然后对其进行一些处理.查询可能需要很长时间(小时),并且在读取结果时内存使用量会不断增加.查询完成后,由于我需要处理,内存会立即出现峰值.如果机器没有足够的RAM,则应用程序在此时失败 - 在查询上浪费了几个小时之后!这对用户来说非常令人沮丧.如果没有足够的RAM,我希望应用程序快速失败.

当然,我可以尝试一些hack,比如分配一个我不需要的大型数组,然后在我真正需要内存之前将其设置为null,但这并不理想,因为它可能实际上导致进程耗尽记忆力,否则就足够了.理想情况下,我不想使用比需要更多的内存,但只是在早期失败,除非在我的应用程序运行的整个时间内保证一定数量.这可能吗?

.net c# memory memory-management

19
推荐指数
1
解决办法
2800
查看次数

在表返回函数中,plpgsql错误"RETURN NEXT在OUT参数的函数中没有参数"

我在PostgreSQL 9.2中有一个plpgsql函数,它返回一个表.该函数运行几个SELECT,返回与函数相同的列,然后返回这些结果或引发异常,具体取决于某些检查.我可以看到这样做的唯一方法是使用FOR ... LOOP,但我无法找到返回行的便捷方法.

我想做这样的事情:

CREATE OR REPLACE FUNCTION my_function()
RETURNS TABLE(column1 integer, column2 boolean, ...)
AS $BODY$
DECLARE
    result_row RECORD;
BEGIN
    FOR result_row IN (SELECT * FROM other_function_returning_same_columns()) LOOP
        IF something_wrong_with(result_row) THEN
            RAISE EXCEPTION 'Something went wrong';
        END IF;

        RETURN NEXT result_row;
    END LOOP;
END
$BODY$ LANGUAGE plpgsql STABLE;
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误:

错误:RETURN NEXT在OUT参数的功能中无法使用参数

我不确定为什么Postgres在这里抱怨,因为我的代码看起来很像文档中的示例,除了我的函数返回TABLE而不是SETOF.没有OUT参数.

我最终成功地使用了它

RETURN QUERY SELECT result_row.column1, result_row.column2, ...;
Run Code Online (Sandbox Code Playgroud)

但是必须一直列出所有列是丑陋的,难以维护.我相信一定有更好的方法.

postgresql exception-handling plpgsql

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

PostgreSQL查询检测重叠时间范围

我在PostgreSQL 9.2中有一个表,看起来像这样(简化):

CREATE TABLE my_features
(
  id integer NOT NULL,
  feature_id integer NOT NULL,
  begin_time timestamp NOT NULL,
  end_time timestamp
)
Run Code Online (Sandbox Code Playgroud)

对于每个feature_id,可能有多行,其时间范围由begin_time/end_time指定.它们可能重叠,但这种情况相对较少.我正在寻找一种快速查找所有具有/没有任何重叠的feature_ids的方法.

我尝试使用窗口函数执行此操作,如下所示:

SELECT feature_id, bool_or(end_time > lead(begin_time) OVER ts_win) OVER ts_win AS overlaps_any
FROM my_features
WINDOW ts_win AS (PARTITION BY feature_id ORDER BY begin_time)
Run Code Online (Sandbox Code Playgroud)

...但这不起作用:

ERROR:  window function calls cannot be nested
Run Code Online (Sandbox Code Playgroud)

算法很简单:通过begin_time对给定feature_id的行进行排序,并检查是否有end_time>下一个begin_time(如果有的话).我怀疑必须有一个简单的方法来做到这一点,也许是使用tsrange函数,但现在似乎无法找到它.

sql postgresql

13
推荐指数
1
解决办法
9708
查看次数

如何报告从长时间运行的PostgreSQL函数到客户端的进度

我有一个C#客户端应用程序,它使用Npgsql在PostgreSQL 9.1.4中调用plpgsql函数.该功能需要很长时间,我想以某种方式向客户报告进度.我该怎么做?

LISTEN/NOTIFY机制听起来很完美,除了整个事务在事务内部运行并且NOTIFY事件直到事务结束才发送,这对我来说是无用的.

我尝试过的另一件事是RAISE NOTICE,我可以在客户端上处理,但即使是那些通知似乎也会缓冲一段时间并分批发送.它总比没有好,但不理想.有什么方法可以"冲洗"它们,所以它们会立即发送给客户吗?

.net sql postgresql plpgsql npgsql

9
推荐指数
2
解决办法
2188
查看次数

ReSharper执行单元测试的控制顺序

有没有办法告诉ReSharper在项目之前执行某组测试?我仍然希望并行执行,我不需要按每个方法控制它,只是每个类都可以.如果有所不同,测试框架就是MSTest.

我想这样做的原因是一些测试工作在低水平并且非常快,但是其他测试工作在更高级别并且速度慢得多.我希望快速测试首先运行,因为如果它们失败了,那么我知道有什么不对,继续没有意义.但是,ReSharper目前首先运行我的慢速测试.

编辑:测试不按字母顺序运行(VS 2010上的R#7.1).我每个类都有一个源文件.类中的测试似乎按照方法在源代码中出现的顺序运行,但我无法弄清楚R#如何确定测试类的顺序.这就是我所追求的,因为慢速和快速测试是在不同的类中.这也不是按字母顺序排列的,但从运行到运行都是一致的.

编辑2:好的,想通了(见答案).

resharper unit-testing

9
推荐指数
1
解决办法
3373
查看次数

C#中的快速数组副本

我有一个包含int []数组的C#类(以及其他几个字段,但数组是主要的).代码经常创建此类的副本,并且分析显示复制此数组的Array.Copy()调用需要花费大量时间.我该怎么做才能让它更快?

数组大小非常小且恒定:12个元素.理想情况下,我喜欢类似C风格的数组:类本身内部的单个内存块(不是指针).这可能在C#中吗?(如果需要,我可以使用不安全的代码.)

我已经尝试过了:

1)使用UIn64和位移代替数组.(每个元素的值也非常小.)这确实使复制速度快,但整体上减慢了程序的速度.

2)为每个数组元素使用单独的字段:int element0,int element1,int element2等.同样,当我必须访问给定索引处的元素时,这总体上较慢.

c# arrays performance unsafe

8
推荐指数
2
解决办法
8387
查看次数

附加到 group_vars 中的 Ansible 字典而不使用 hash_behaviour = merge

我想定义一个字典变量,各个主机组可以将自己的密钥添加到group_vars 中(不使用set_fact)。例如这样的事情:

group_vars\ftp_servers.yml:

important_ports:
    ftp: 21
Run Code Online (Sandbox Code Playgroud)

group_vars\web_servers.yml:

important_ports:
    http: 80
Run Code Online (Sandbox Code Playgroud)

这样,当在具有这两个角色的服务器上运行时,字典就会组合起来,即important_ports=

{
    ftp: 21,
    http: 80
}
Run Code Online (Sandbox Code Playgroud)

这正是hash_behaviour = merge所做的,但它已被弃用,并将在 Ansible 2.13 中删除。如果没有它,我如何实现同样的目标?

我见过的唯一推荐的解决方案是使用combine过滤器:

set_fact:
  important_ports: "{{ important_ports | combine({ http: 80 }) }}"
Run Code Online (Sandbox Code Playgroud)

这在任务中有效set_fact,但在 group_vars 中失败,并显示“在模板字符串中检测到递归循环:{{ important_ports | merge({ http: 80 }) }}

我什至尝试将group_vars/all中的变量初始化为空字典 ( important_ports: {}) ,该变量应该在其他 group_vars 之前进行评估,但它仍然给出相同的错误。

ansible

7
推荐指数
1
解决办法
1789
查看次数

查找PostgreSQL中所有范围集的所有交集

我正在寻找一种有效的方法来查找时间戳范围集之间的所有交叉点.它需要与PostgreSQL 9.2一起使用.

假设范围代表一个人可以见面的时间.每个人在可用时可能有一个或多个时间范围.我想找到一个会议可以进行的所有时间段(即,在此期间所有人都可用).

这是我到目前为止所得到的.它似乎有效,但我不认为它非常有效,因为它一次只考虑一个人的可用性.

WITH RECURSIVE td AS
(
    -- Test data. Returns:
    -- ["2014-01-20 00:00:00","2014-01-31 00:00:00")
    -- ["2014-02-01 00:00:00","2014-02-20 00:00:00")
    -- ["2014-04-15 00:00:00","2014-04-20 00:00:00")
    SELECT 1 AS entity_id, '2014-01-01'::timestamp AS begin_time, '2014-01-31'::timestamp AS end_time
    UNION SELECT 1, '2014-02-01', '2014-02-28'
    UNION SELECT 1, '2014-04-01', '2014-04-30'
    UNION SELECT 2, '2014-01-15', '2014-02-20'
    UNION SELECT 2, '2014-04-15', '2014-05-05'
    UNION SELECT 3, '2014-01-20', '2014-04-20'
)
, ranges AS
(
    -- Convert to tsrange type
    SELECT entity_id, tsrange(begin_time, end_time) AS the_range
    FROM td …
Run Code Online (Sandbox Code Playgroud)

sql postgresql date-range

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

使用一个命令添加多个PostgreSQL枚举值

由于可以使用添加PostgreSQL 9.1枚举值

ALTER TYPE my_type ADD VALUE new_value;
Run Code Online (Sandbox Code Playgroud)

但是,尝试将此作为较大脚本的一部分运行会产生错误:

ALTER TYPE ...无法从函数或多命令字符串执行ADD

这使得脚本更改在生产中应用变得非常麻烦,因为支持人员必须记住,虽然大多数脚本可以"正常"运行,但是有一些"特殊"脚本需要在pgAdmin中打开并运行手动,一块一块.我用Google搜索了这个并且我理解了限制 - 无法在事务或"多命令字符串"的一部分中添加枚举值.没关系.我不需要这样做.我只想添加多个枚举值并执行其他不相关的SQL语句,而不必一次为Postgres提供一个语句.

换句话说:我希望能够从pgAdmin和psql运行单个脚本,它只是执行与pgAdmin一样的操作,当我一次突出显示一行并按F5(运行)时.有没有办法做到这一点,也许用plpgsql?

postgresql enums

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