小编fin*_*nnw的帖子

Boehm GC如何为C程序工作?

我检查了Boehm GC.用于C/C++的GC.

我知道标记和扫描算法.我很好奇的是它如何只在整个C内存中获取指针.我对C内存的理解只是一个普通的字节数组.是否有可能确定内存中的值是否为指针?

c garbage-collection principles boehm-gc

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

从具有尾随垃圾的字符串中解析整数

我需要解析出现在字符串开头的十进制整数.

十进制数字后面可能有尾随垃圾.这需要被忽略(即使它包含其他数字.)

例如

"1" => 1
" 42 " => 42
" 3 -.X.-" => 3
" 2 3 4 5" => 2
Run Code Online (Sandbox Code Playgroud)

.NET框架中是否有内置方法来执行此操作?

int.TryParse()不适合.它允许尾随空格但不允许其他尾随字符.

实现这个很容易,但如果它存在,我宁愿使用标准方法.

.net c# parsing

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

混合基于构造函数和基于setter的注入是一件坏事吗?

我有一个从CSV文件操作导入产品的类,需要大约7个参数.这是进口商绝对需要的信息.

所有这些参数都具有相同的使用寿命.最后,我们必须有一个不可变对象.

我太害怕在构造函数中列出所有这些因为它对可读性的影响并且决定将其中的3个移动到setter注入.但显然这不是一个优雅的解决方案.

问题:

1)混合基于构造函数和基于setter的注射是不好的做法吗?

2)如何解决这个特殊问题?

我正在考虑应用Martin Fowler的"引入参数对象"重构,但这有一个问题.

4参数可以很容易地移动到Parameter对象(customerId,projectId,languageId等) - 所有整数.

其他3个参数是我注入的对象(模拟单元测试需要它).

oop setter refactoring dependency-injection

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

适用于Java中事件侦听器的集合类

相关: java是否有"LinkedConcurrentHashMap"数据结构?


我正在寻找一个集合类来保存对事件监听器的引用.

理想情况下,我希望该集合具有以下属性(按优先级顺序):

  1. 维护广告订单.较早的侦听器可能会取消该事件,从而阻止它被传递给稍后添加的侦听器.如果使用诸如HashSet迭代器可能以错误的顺序返回元素的类,这将会中断.
  2. 使用WeakReferences使得侦听器列表不会阻止侦听器被垃圾收集.
  3. 该集合是a Set,因此会自动删除重复项.
  4. Iterator是集合的线程安全快照,不受添加新侦听器的影响.还允许在多个线程上传递事件.(这不是必需的 - 我可以迭代一下该集的克隆.)

我知道有些类满足一些但不是所有这些标准.例子:

  • java.util.LinkedHashSet (#1和#3)
  • java.util.WeakHashMap,包裹着Collections.newSetFromMap(#2和#3)
  • javax.swing.event.EventListenerList (需要一些额外的同步)(#1和#4)
  • java.util.concurrent.CopyOnWriteArraySet (#1,#3和#4)

但#1和#2都没有.这样的类是否存在于某个库中?

java collections concurrency weak-references event-listener

13
推荐指数
2
解决办法
4047
查看次数

GLUTesselator的替代品?

我想知道是否有一个库或其他方法在OpenGL中生成多轮廓多边形.我做了代码分析,GLUTesselator正在杀死我的循环.谢谢



对于具有GPL兼容许可证的库,Bounty +50,理想情况下为3D(第二好的是2.5D,就像GLUtesselator本身一样.)

c c++ opengl

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

Future.cancel的用例(false)?

在什么情况下,人们想要falsemayInterruptIfRunning参数传递给Future.cancel()

如果我理解正确,如果你通过false并且任务被取消但是线程没有被中断,那么结果(或ExecutionException)永远不会被访问,因为任务仍被标记为已取消(即isCancelled()返回trueget()抛出)CancellationException.

其他可能的情况是:

  • RunnableCallable执行不检查中断和将运行完,即使你打断它(这里的中断没有区别)
  • 在您调用之前任务已经完成cancel()(再次中断没有区别)
  • 任务需要在退出之前执行一些清理(一个编写良好的实现将try ... finally用于此.)
  • 任务无法立即终止,必须继续执行受中断影响的操作,例如阻塞I/O(在这种情况下,您可能根本不应该调用cancel)

那么什么时候/为什么你会在不打断任务的情况下取消任务?

java concurrency future

13
推荐指数
2
解决办法
5527
查看次数

什么放在IF块中以及放入ELSE块中的内容?

这是一个次要的样式问题,但是您添加到代码中的每一点可读性都很重要.

所以,如果你有:

if (condition) then
{
   // do stuff
}
else
{
   // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

你如何决定它是否更好,或者像这样:

   if (!condition) then
   {
     // do other stuff
   {
   else
   {
     // do stuff
   }
Run Code Online (Sandbox Code Playgroud)

我的启发式是:

  1. 保持病情积极(阅读时心理计算较少)
  2. 将最常见的路径放入第一个块

coding-style function-exit

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

计算地图:提前计算价值

我有一个计算映射(带有软值),我用它来缓存昂贵的计算结果.

现在我有一种情况,我知道在接下来的几秒钟内可能会查找一个特定的密钥.该密钥的计算成本也比大多数都要高.

我想在最小优先级线程中提前计算该值,以便在最终请求该值时,它已经被缓存,从而缩短了响应时间.

这样做的好方法是:

  1. 我可以控制执行计算的线程(特别是它的优先级).
  2. 避免重复工作,即仅进行一次计算.如果计算任务已经在运行,那么调用线程会等待该任务而不是再次计算该值(FutureTask实现这一点.使用Guava的计算映射,如果你只调用get它,那么这是真的,但如果你将它与调用混合,则不是put.)
  3. "预先计算值"方法是异步的和幂等的.如果计算已在进行中,则应立即返回,而不等待该计算完成.
  4. 避免优先级倒置,例如,如果高优先级线程在中等优先级线程执行不相关的操作时请求该值,但计算任务在低优先级线程上排队,则高优先级线程不能被饿死.也许这可以通过临时提升计算线程的优先级和/或在调用线程上运行计算来实现.

如何在所涉及的所有线程之间进行协调?


附加信息
我的应用程序中的计算是图像过滤操作,这意味着它们都是CPU绑定的.这些操作包括仿射变换(范围从50μs到1ms)和卷积(最多10ms).当然,不同线程优先级的有效性取决于操作系统抢占较大任务的能力.

java concurrency memoization guava

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

测试两个IEnumerable <T>是否具有相同频率的相同值

我有两个多字节,都是IEnumerables,我想比较它们.

string[] names1 = { "tom", "dick", "harry" };
string[] names2 = { "tom", "dick", "harry", "harry"};
string[] names3 = { "tom", "dick", "harry", "sally" };
string[] names4 = { "dick", "harry", "tom" };

希望names1 == names4返回true(并且self == self显然返回true)
但是所有其他组合都返回false.

什么是最有效的方式?这些可以是大量复杂对象.

我看着做:
var a = name1.orderby<MyCustomType, string>(v => v.Name);
var b = name4.orderby<MyCustomType, string>(v => v.Name);

return a == b;

c# linq set

12
推荐指数
2
解决办法
6936
查看次数

我的"代码隐藏"代码都没有被调用

我刚刚在IIS中创建了一个ASP.NET C#项目和一个虚拟目录(据我所知),但是我看到了一些我以前从未见过的非常奇怪的行为.

看来没有我的C#方法不断被调用.我知道这是因为我已经覆盖了一堆方法,除了抛出异常之外什么都不做.至少Default.aspx可在浏览器中查看(见下文)

以下是我的Default.aspx.cs文件的确切内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Drawings2
{
    public partial class _Default : System.Web.UI.Page
    {
        static _Default()
        {
            throw new Exception("XXX");
        }
        public _Default()
        {
            throw new Exception("XXX");
        }
        override protected void OnInit(EventArgs e)
        {
            /*
             * base.OnInit(e);
             * InitializeComponent();
             */
            throw new Exception("XXX");
        }
        private void InitializeComponent()
        {
            /*
             * Load += new EventHandler(this.Page_Load);
             */
            throw new Exception("XXX");
        }
        protected void Page_Load(object sender, EventArgs e)
        { …
Run Code Online (Sandbox Code Playgroud)

c# asp.net iis asp.net-3.5

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