问题列表 - 第20700页

不可改变的阶级结构设计

所以我们都意识到不可变类型的好处,特别是在多线程场景中.(或者至少我们都应该意识到这一点;参见例如System.String.)

但是,我没有看到很多关于创建不可变实例的讨论,特别是设计指南.

例如,假设我们想要具有以下不可变类:

class ParagraphStyle {
    public TextAlignment Alignment {get;}
    public float FirstLineHeadIndent {get;}
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我见过的最常见的方法是拥有可变/不可变的"对"类型,例如可变的List <T>和不可变的ReadOnlyCollection <T>类型或可变的StringBuilder和不可变的String类型.

为了模仿这个现有的模式,需要引入某种类型的"可变" ParagraphStyle类型,它"复制"成员(提供setter),然后提供一个ParagraphStyle构造函数,接受可变类型作为参数

// Option 1:
class ParagraphStyleCreator {
    public TextAlignment {get; set;}
    public float FirstLineIndent {get; set;}
    // ...
}

class ParagraphStyle {
    // ... as before...
    public ParagraphStyle (ParagraphStyleCreator value) {...}
}

// Usage:
var paragraphStyle = new ParagraphStyle (new ParagraphStyleCreator {
    TextAlignment = ...,
    FirstLineIndent …
Run Code Online (Sandbox Code Playgroud)

.net immutability

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

从使用atexit()注册的函数内部获取退出状态

在我的atexit()注册函数里面,我想得到退出状态(exit(3)的参数或者返回的main()).

有没有可行的方法这样做?是否有任何GNU libc特定的方式来实现它,例如全局持有我可以参考的值?

c

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

WPF中的Aero窗口(C#)

我想实现一个Window类似于IE的新版本如何在Vista/7 aero中添加URL栏的方式.我环顾四周,找不到太多有用的信息,并且想知道你们中是否有人知道最好的方法!

c# wpf window aero

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

将对象从控制器传递到其他控制器

这是问题所在,

我有一个控制器:

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Detail(SomeObjectX a)
    {
        SomeObjectY b = new SomeObjectY();

 b.merge(a); //i already have merge method.

        return RedirectToAction("SomeAction", "SomeController", new { c = b });
    }
Run Code Online (Sandbox Code Playgroud)

是否可以将对象b传递给不同控制器上的其他操作,在本例中为SomeController上的SomeAction.谢谢你的帮助 :)

c# asp.net-mvc c#-4.0

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

将对象添加到python列表

我正在尝试将一个对象添加到列表中,但由于我在尝试重置列表后添加了实际对象,因此列表中的所有值都将重置.是否有一种实际的方法可以将监视器对象添加到列表中并更改值,而不会影响我已在列表中保存的值?

谢谢

码:

arrayList = []

for x in allValues:


        result = model(x)

        arrayList.append(wM)

        wM.reset()
Run Code Online (Sandbox Code Playgroud)

其中wM是一个监视器类 - 正在模型方法中计算/计算出来

python object

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

在.NET中处理粗暴的应用程序中止

我知道即使问这个问题,我也开始自己开火了,但我想我会看看StackOverflow是否有解决我遇到的问题的方法......

我有一个C#应用程序在客户端站点失败,我无法在本地重现.不幸的是,我很难(不可能)获得任何有助于隔离问题根源的信息.

我有一个相当广泛的错误监控框架,它在所有常见的地方监视未处理的异常:

  • 我控制的线程中的Backstop异常处理程序
  • WinForms异常的Application.ThreadException
  • AppDomain.CurrentDomain.UnhandledException

在我可以访问它们的地方记录详细信息.

这在过去非常有用,可以识别生产代码中的问题,但是没有向我提供有关当前一系列问题的任何信息.

我最好的猜测是,核心问题是"粗鲁"异常类型之一(线程中止,内存不足,堆栈溢出,访问冲突等),这些异常类型正在逐步升级为严重关闭有机会看到发生了什么.

我可以对快照信息做些什么,因为我的进程崩溃会有用吗?理想情况下,我可以写出我的自定义日志格式,但如果我能有一种可靠的方法来确保在某处写入崩溃转储,我会很高兴.

我希望我可以实现从CriticalFinalizerObject派生的类,并在它处理时吐出最后机会错误注销,但这似乎并没有在我测试的StackOverflow场景中触发.

由于缺少代码签名证书,我无法使用Windows错误报告和朋友.

我不是试图从任意异常中"恢复",我只是想记下下去的路上出了什么问题.

有任何想法吗?

c# unhandled-exception

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

Java并发 - Web应用程序

我想我在我的网络应用程序中发现了更多错误.通常,我不担心并发问题,但是当您收到ConcurrentModificationException时,您开始重新考虑您的设计.

我在Jetty上使用JBoss Seam和Hibernate以及EHCache.现在,它是一个具有多个核心的单个应用程序服务器.

我简要地查看了我的代码,发现了一些尚未抛出异常的地方,但我相信他们可以.

第一个servlet过滤器我基本上检查是否有消息通知用户后台发生的事件(来自作业或其他用户).过滤器只是在模式弹出窗口中向页面添加消息.消息存储在会话上下文中,因此可能另一个请求可以从会话上下文中提取相同的消息.

现在,它工作正常,但我没有遇到许多并发请求的页面.我想我可能需要编写一些JMeter测试来确保不会发生这种情况.

第二个servlet过滤器记录所有传入的请求以及会话.这让我知道客户端来自哪里,他们正在运行什么浏览器等等.我最近看到的问题是图像库页面(大约在同一时间有很多请求),我最终得到了并发修改异常,因为我正在向会话添加请求.

会话包含一个请求列表,该列表似乎被多个线程命中.

@Entity
public class HttpSession 
{
  protected List<HttpRequest> httpRequests;

  @Fetch(FetchMode.SUBSELECT)
  @OneToMany(mappedBy = "httpSession")
  public List<HttpRequest> getHttpRequests()
  {return(httpRequests);}

  ...
}

@Entity
public class HttpRequest
{
  protected HttpSession httpSession;

  @ManyToOne(optional = false)
  @JoinColumn(nullable = false)
  public HttpSession getHttpSession()
  {return(httpSession);}

  ...
}
Run Code Online (Sandbox Code Playgroud)

在第二个servlet过滤器中,我正在做某种事情:

httpSession.getHttpRequests().add(httpRequest);
session.saveOrUpdate(httpSession);
Run Code Online (Sandbox Code Playgroud)

错误输出的部分是当我进行一些比较以查看从请求到请求的变化时:

for(HttpRequest httpRequest:httpSession.getHttpRequests())
Run Code Online (Sandbox Code Playgroud)

那条线出现了并发修改异常.

要走的路:1.JMeter测试在这里有用吗?2.您建议哪些书籍用于编写在并发加载下扩展的Web应用程序?3.我尝试在我认为需要它的地方放置同步,即在循环请求的方法上,但它仍然失败.我还需要做什么?

我添加了一些评论:

我曾考虑过将http请求记录为后台任务.我可以轻松生成后台任务来保存该信息.我想记住为什么我没有那么评价.我认为有一些信息我想当场访问.

如果我把它变成异步,这会大大加快吞吐量 - 我必须使用JMeter来衡量这些差异.

我仍然需要处理那里的并发问题.

谢谢,

沃尔特

java concurrency seam

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

存储DotNetOpenAuth信息和用户信息检索

这个问题是一个结构/设计问题,因为我无法找到执行任务的最佳方法.

在我的MVC应用程序中,我使用DotNetOpenAuth(3.4)作为我的登录信息提供者,只使用FormsAuthenticationcookie 的标准等.

DB中的当前用户表具有:

  • UserId(PK,uniqueidentifier)
  • OpenIdIdentifier(nvarchar(255))
  • OpenIdDisplay(nvarchar(255))
  • Displayname(nvarchar(50))
  • 电子邮件(nvarchar(50))
  • 电话号码(nvarchar(50))

由于UserId是用户的明确标识符(他们应该能够在以后更改其OpenId提供程序),因此它是其他表链接到(对于用户)的关键.

这是当前代码,在成功身份验证时,会创建临时用户并重定向到"创建操作".

        switch (response.Status)
        {
            case AuthenticationStatus.Authenticated:

                FormsAuthentication.SetAuthCookie(response.ClaimedIdentifier, false);

                var users = new UserRepository();
                if (!users.IsOpenIdAssociated(response.ClaimedIdentifier))
                {
                    var newUser = new DueDate.Models.User();
                    newUser.OpenIdIdentifer = response.ClaimedIdentifier;
                    newUser.OpenIdDisplay = response.FriendlyIdentifierForDisplay;

                    TempData["newUser"] = newUser;

                    return this.RedirectToAction("Create");
                }
Run Code Online (Sandbox Code Playgroud)

现在问题的症结在于:

  1. 是否response.ClaimedIdentifier存储了针对用户的正确信息?

  2. FormAuthentication.SetAuthCookie表单身份验证的首选方法吗?或者,还有更好的方法?

  3. 当我调用SetAuthCookie时,除了用户之外没有与用户相关的数据ClaimedIdentifier.如果我一直提到他们UserId,创建用户是个更好的主意,那么将其存储UserId在cookie而不是ClaimedIdentifier

  4. 如果我在很多地方使用UserId,我如何从cookie中检索它,或者将它存储在其他更合乎逻辑/有用的地方?

有点长的啰嗦,但我一直在努力找到最好的方法来做这个/

database asp.net dotnetopenauth

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

JQuery ajax跨域调用和权限问题

我有这个轮询脚本来检查是否在服务器上创建了一个文本文件.在本地工作很好,但当文件在不同的域上时失败.我如何重写这个跨域支持?

$.ajax({ 
    url: 'http://blah.mydomain.com/test.txt', 
    type: "GET", 
    success: function(result) { 
        //Success!
        window.location.replace(Successful.aspx');
    }, 
    error: function(request, status, error) { 
        setTimeout("VerifyStatus(" + pollingInterval + ")");
    }
    });
Run Code Online (Sandbox Code Playgroud)

编辑:我最终使用YQL来解决跨域问题,虽然它可行,但YQL实际上很慢,增加了相当多的性能开销.任何人都可以为跨域JQuery调用建议更好的解决方案吗?

javascript asp.net ajax jquery cross-domain

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

Python搁置OutOfMemory错误

我有一些数据存储在我想要处理的数据库中.数据库访问非常缓慢,因此我决定在进行任何处理之前将所有数据加载到字典中.但是,由于存储的数据量巨大,我得到了一个内存不足的错误(我看到使用了超过2个演出).所以我决定使用磁盘数据结构,并发现使用shelve是一种选择.这是我做的(伪python代码)

def loadData():
    if (#dict exists on disk):
        d = shelve.open(name)
        return d
    else:
        d = shelve.open(name, writeback=True)
        #access DB and write data to dict
        # d[key] = value 
        # or for mutable values
        # oldValue = d[key]
        # newValue = f(oldValue)
        # d[key] = newValue 
        d.close()
        d = shelve.open(name, writeback=True)
        return d
Run Code Online (Sandbox Code Playgroud)

我有一些问题,

1)我真的需要writeBack = True吗?它有什么作用?

2)我仍然得到一个OutofMemory异常,因为我没有对数据写入磁盘的时间进行任何控制.我怎么做?我尝试每隔几次迭代执行一次sync(),但这也无济于事.

谢谢!

python persistence dictionary shelve out-of-memory

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