小编wal*_*pus的帖子

滥用IDisposable是否受益于"使用"被认为有害的陈述?

接口的目的IDisposable是以有序的方式释放非托管资源.它与using定义范围的关键字密切相关,该关键字在有问题的资源被处置之后.

因为这种机制非常简洁,所以我一直试图让类实现IDisposable能够以其不适合的方式滥用这种机制.例如,可以实现类来处理嵌套的上下文,如下所示:

class Context : IDisposable
{
    // Put a new context onto the stack
    public static void PushContext() { ... }

    // Remove the topmost context from the stack
    private static void PopContext() { ... }

    // Retrieve the topmost context
    public static Context CurrentContext { get { ... } }

    // Disposing of a context pops it from the stack
    public void Dispose()
    {
        PopContext();
    }
}
Run Code Online (Sandbox Code Playgroud)

调用代码的用法可能如下所示:

using (Context.PushContext())
{
   DoContextualStuff(Context.CurrentContext); …
Run Code Online (Sandbox Code Playgroud)

.net c# idisposable

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

简单的Mercurial扩展无法导入

我正在尝试按照示例代码编写Mercurial扩展.这是一个最小的样本,从示例代码中逐字复制:

from mercurial import cmdutil
from mercurial.i18n import _

cmdtable = {}
command = cmdutil.command(cmdtable)
Run Code Online (Sandbox Code Playgroud)

我将其保存到文件并在我的.hgrc文件中安装扩展名,如下所示:

[extensions]
myext=C:\foo\myext.py
Run Code Online (Sandbox Code Playgroud)

任何后续发出的命令,例如hg init现在导致以下错误消息:

***无法从C:\ foo\myext.py导入扩展名myext:'module'对象没有属性'command'

这可能是由错误的环境引起的,例如缺少环境变量吗?

我在Windows 10上使用Mercurial 4.7,由TortoiseHg安装程序(tortoisehg-4.7.0-x64)安装.Mercurial使用Python 2.7.13,也是由TortoiseHg安装程序安装的.

python mercurial tortoisehg mercurial-extension

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

在不同文件中设置断点无效

ruby调试器不会停止我在与执行开始时不同的文件中设置的断点.例如,考虑这两个文件,foo.rb:

# foo.rb
class Foo
  def bar
    puts "baz"
  end
end
Run Code Online (Sandbox Code Playgroud)

main.rb:

# main.rb
require './foo'
Foo.new.bar
Run Code Online (Sandbox Code Playgroud)

我开始使用调试ruby -r debug .\main.rb.现在,当我尝试使用另一个文件中的特定行设置断点时,我在foo.rb:4处b ./foo.rb:4获得消息Set breakpoint 1,但是当我cont执行时,程序执行到最后,调试器永远不会停止.但是,如果我在main.rb中断行,例如b ./main.rb:3,或者方法,例如b Foo.bar,调试器按预期停止.

为什么调试器不在主文件以外的文件中的断点处停止?

更新:我在Windows 7以及OS X 10.8上尝试过使用Ruby 1.9.3; 它在两种环境中都不起作用.

我也刚刚意识到调试器在脚本运行到结束后退出:我开始调试main.rb,使用cont,然后baz打印在控制台上,我就回到了shell中.这是预期的行为,还是调试器崩溃了?

ruby debugging breakpoints

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

将外键映射到主键以外的其他键

在我的数据库中有表AssignmentWorkplace,从概念上讲,每个作业都在一个工作场所进行.该分配表中包含一列工作场所,这是一个外键引用的职场表的WorkplaceName列.

这是架构:

table Workplace (
  ID int primary key,
  WorkplaceName int
)

table Assignment (
  Workplace int
)
Run Code Online (Sandbox Code Playgroud)

我的映射:

class Workplace
{
  public virtual int ID { get; set; }
  public virtual int WorkplaceName { get; set; }
} 

class Assignment 
{
  public virtual Workplace { get; set; }
}

class AssignmentMap : ClassMap<Assignment>
{
  public AssignmentMap()
  {
    References(a => a.Workplace);
  }
}
Run Code Online (Sandbox Code Playgroud)

在运行时我得到了异常

没有具有给定标识符的行[MyProject.Workplace#2001]

这里的问题似乎是FH 在Workplace.ID …

.net nhibernate fluent-nhibernate

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

使用Graphics.DrawArc重现崩溃

我们的软件提供技术图纸.一个特定的绘图使应用程序每次都出现OutOfMemoryException崩溃.经过调查,似乎没有什么不寻常的; 该应用程序没有请求大量的内存,没有使用很多句柄.我尝试捕获异常,应用程序完成绘图而不抛出另一个.实际上,总是只有一个OutOfMemoryException,它始终是导致它的相同图形基元.

以下代码是导致此特定崩溃所需的最低要求.似乎图像大小,笔样式和坐标的确切组合导致异常.将坐标向下舍入到三位小数会使其消失,就像使图形尺寸更小或使用没有划线的笔一样.

using (Bitmap b = new Bitmap(200, 200))
{
  using (Graphics g = Graphics.FromImage(b))
  {
    using (Pen p = new Pen(Color.Black))
    {
      p.DashPattern = new float[]{10.0f, 2.0f};

      RectangleF r = new RectangleF(
        BitConverter.ToSingle(new byte[]{0xD3, 0x56, 0xB3, 0x42}, 0),
        BitConverter.ToSingle(new byte[]{0x87, 0x2D, 0x17, 0x43}, 0),
        BitConverter.ToSingle(new byte[]{0xE2, 0x81, 0xD1, 0x3F}, 0),
        BitConverter.ToSingle(new byte[]{0xE2, 0x81, 0xD1, 0x3F}, 0));
      float st = BitConverter.ToSingle(new byte[]{0x6B, 0xF6, 0x1A, 0x42}, 0);
      float sw = BitConverter.ToSingle(new byte[]{0x6D, 0x33, 0x4F, 0x40}, 0); …
Run Code Online (Sandbox Code Playgroud)

.net graphics

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

Oracle SQL 会话的生命周期是什么?

我在 Oracle SQL Server 中遇到了全局临时表的概念。根据关于全局临时表教程

全局临时表中的数据是私有的,因此会话插入的数据只能由该会话访问。

我相信这可以允许以下场景:客户端启动存储过程两次,每次都预先填充全局临时表以供 sp 处理。这两个计算不会相互干扰,因为每个计算只看到自己的数据,而不是共享数据,就像普通表的情况一样。

但是,这完全取决于会话的构成以及会话的开始和结束时间。

根据Oracle 数据库概念词汇表

会话:数据库实例内存中的逻辑实体,表示当前用户登录数据库的状态。单个连接上可以建立 0、1 或多个会话。

连接:客户端进程和 Oracle 数据库实例之间的通信路径。

这并没有消除我所有的困惑,所以这是我的具体问题:

我的应用程序在其整个生命周期内都保持与 Oracle SQL 服务器的单一连接。它在同一个连接上连续执行多个 SQL 命令/查询,这些查询中的每一个都是它自己的会话,它们会共享一个会话,还是不是简单的回答?

考虑这个伪代码:

Command c1 = new Command("insert into TMP_TABLE (FOO) values ('TEST')");
Command c2 = new Command("select FOO from TMP_TABLE");

c1.Execute();
foreach (var value in c2.Query().Select("FOO"))
{
    print(value);
}
Run Code Online (Sandbox Code Playgroud)

我已经在我的应用程序中运行了上面的代码,正如预期的那样,该命令c2返回了零结果。我认为这意味着每个查询都构成了自己的会话,这就是我正在寻找的。但我可以依赖吗?

sql oracle oracle12c

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

添加OCMock后,单元测试始终"成功"

我想在我的Cocoa项目的单元测试中使用OCMock.我已下载最新版本的OCMock(2.0.1)并将OCMock.framework复制到我的项目目录中.在Xcode中,我已将框架添加到单元测试目标的链接阶段.然后我添加了一些使用OCMock类的代码.

从那时起,所有单元测试都被报告为"成功" - 绿灯,没有错误或警告.即使在引入STFail电话后,Xcode声称"测试成功".在任意测试方法中放置断点表明它们都没有被执行.

如果我使用OCMock注释掉代码,包括import指令,问题仍然存在.

STFails当我从链接阶段删除OCMock时,问题就会消失 - 即,再次失败.

这类似于我之前提出的另一个问题,但不完全相同:在这种情况下,Log Navigator中的信息显示没有错误.什么可能导致这种行为?我该怎么做才能诊断出这个问题?

cocoa frameworks unit-testing ocmock sentestingkit

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

为什么通过变量引用事件?

我一直在其他人的代码中看到这种调用事件的模式:

void OnMyEvent()
{
  var myEvent = MyEvent;

  if (myEvent != null)
    myEvent(this, EventArgs.Empty);
}
Run Code Online (Sandbox Code Playgroud)

使用变量来引用事件有什么好处MyEvent,而不是直接使用MyEvent(this, EventArgs.Empty)

c# events coding-style

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

SpriteKit 动画

我有这段代码,它可以在我按住我创建的按钮的整个过程中执行我想要执行的动画。不过,我希望在按住按钮时重复此操作。一旦我放开它,精灵就会回到站立位置。

func runForward()
{
    let run = SKAction.animateWithTextures([
        SKTexture(imageNamed: "walk1"),
        SKTexture(imageNamed: "walk2"),
        SKTexture(imageNamed: "walk3"),
        SKTexture(imageNamed: "walk4")
    ], timePerFrame: 0.09)
    
    _hero!.runAction(run)
}
Run Code Online (Sandbox Code Playgroud)

如果我将此代码放入更新中,它会更新每一帧,导致动画只有在我将手指从按钮上移开后才能完成。如果我在单击按钮后启动此动画,它只会在开始时执行它。我想知道如何让它连续运行,直到我将手指从按钮上移开。

这是按钮的代码,它只是放置在屏幕上的 Sprite 节点。

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */    
    // Loop over all the touches in this event
    for touch: AnyObject in touches {
        // Get the location of the touch in this scene
        let location = touch.locationInNode(self)
        // Check if the location of the touch is within the …
Run Code Online (Sandbox Code Playgroud)

animation sprite-kit swift

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

Cocoa屏幕保护程序配置面板自由浮动

我正在使用Cocoa的ScreenSaver API编写屏幕保护程序.它是为64位arch编译的,我在Lion上运行它.

为了启用配置,我在主视图中添加了以下内容:

- (BOOL)hasConfigureSheet
{
    return YES;
}

- (NSWindow*)configureSheet
{
    if (configureSheet == nil) {
        if (![NSBundle loadNibNamed: @"WTConfigureSheet" owner: self]) {
            NSLog(@"Failed to load config sheet");
            return nil;
        }
    }

    ScreenSaverDefaults *defaults =
        [ScreenSaverDefaults defaultsForModuleWithName: WTModuleName];

    backgroundColorWell.color = [defaults objectForKey: @"BackgroundColor"];
    lightLetterColorWell.color = [defaults objectForKey: @"LightLetterColor"];
    darkLetterColorWell.color = [defaults objectForKey: @"DarkLetterColor"];

    return configureSheet;
}
Run Code Online (Sandbox Code Playgroud)

新安装保护程序后,单击"选项"使配置页不显示为工作表,而是在屏幕上自由浮动,没有边框.否则,它会正常工作并在被解雇后消失.

当我再次单击"选项"时,配置页再次出现,这次正确显示为首选项窗口的一页.然后立即冻结,以便我无法点击任何控件.

有谁知道导致这种行为的原因是什么?

cocoa screensaver

2
推荐指数
1
解决办法
556
查看次数

忽略PL / SQL函数的返回值

有时我调用PL / SQL函数来接收和处理它返回的值。其他时候,我只想为副作用调用相同的函数。

例如,考虑一个日志记录函数,该函数将其参数记录在表中,然后返回由相同参数创建的格式化字符串。有时我想使用返回值,例如将其显示给用户,而其他时候,我只是调用表记录功能,而忽略返回值。在后一种情况下,我想避免声明一个变量来保存返回的值并编写一条assigment语句。

这个问题触及主题,答案似乎是调用者必须使用函数返回的值,无论是通过赋值语句还是select into

有没有一种方法可以在PL / SQL中调用函数并丢弃返回的值?

oracle plsql

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