几个月前我发现了PostSharp,有一段时间,它很好.
但后来法律回来时回答说他们不喜欢旧版本的许可证.然后该部门告诉我,2.0的价格高得令人无法接受(我们需要的座位数量)......我非常失望,但并不沮丧.我想,不能是唯一这样的框架.
我一直在寻找替代品,但大多数都是死的,维护得不好(特别是在文件部门),学术用途,或者以上所有(我在看你Aspect.Net)
然后我发现了Spring.Net,有一段时间,它很好.
我一直在阅读文档,它继续绘制一个似乎是AOP天堂的超级画面.我不再锁定属性来标记我想要进行代码拦截的位置,但它可以用XML配置,对它的更改不需要重新编译.大.
然后我查看了示例,并在每个使用场景中看到以下内容:
// Create AOP proxy using Spring.NET IoC container.
IApplicationContext ctx = ContextRegistry.GetContext();
ICommand command = (ICommand)ctx["myServiceCommand"];
command.Execute();
if (command.IsUndoCapable)
{
command.UnExecute();
}
Run Code Online (Sandbox Code Playgroud)
为什么必须存在前两行代码?它毁了一切.这意味着我不能简单地为用户提供一组方面和属性或XML配置,他们可以通过在适当的方法/类/ etc上粘贴适当的属性或在XML中编辑匹配模式来使用它们.他们必须修改他们的程序逻辑才能使其工作!
有没有办法让Spring.Net在这种情况下表现为PostSharp?(即用户只需要添加属性/ XML配置,而不是编辑任何方法的内容.
或者,PostSharp有替代品吗?我在SO上看到了一些题为这样的问题,但是他们都没有真正想要取代PostSharp,他们只是想补充它的功能.我需要完全更换.
我寻求建议,要么证明或消除我团队中的信念(显然没有理由).相信是开始一个新的.Net应用程序进程是昂贵的内存(每个进程20MB及以上).虽然我指出应用程序显然没有使用那么多(如内存分析器中所见),但他们反驳说它不是应用程序,而是.Net Framework的运行时消耗内存.
这是基于他们在某处听到的东西,所以没有确凿的证据存在,但这种信念在团队中根深蒂固.我已经google了一下,但是我找不到对.Net Framework运行时的每个进程成本的任何认真分析.虽然我根本无法接受每个.Net过程都很昂贵(虽然我愿意承认我可能错了),但我不太了解我的观点.另一方面,我的队友不足以证明我是错的.有谁知道有关此事的任何研究/分析?
谢谢.
虽然我很少编写C代码,但我经常会看到它(主要是由于我的领域中的书籍将其作为算法示例的参考语言)而且有些东西一直在讨论变量/参数的声明方式.最好的例子就是这个List有一个扭曲的例子,关于Linux内核中使用的Linked List的特定实现(抱歉,我最初有一个博客文章的链接,但显然博客文章已被删除,我从我复制的代码浏览器的缓存).
struct blog {
...
struct ls posts;
};
struct post {
...
struct ls blog_posts;
};
void delete_blog(struct blog *blog) {
...
struct post *p;
ls_for_each(&blog->posts, p, blog_posts) {
free(p);
}
free(blog);
}
Run Code Online (Sandbox Code Playgroud)
让我感到困惑的是,他们不断在任何地方重复关键字结构.我的意思是像ls,blog,post这样的东西被声明为结构体,那么每次声明一个变量或该类型的函数参数时,它是什么意思呢?这告诉编译器它不能从你实例化的东西被定义为结构的事实中推断出来了什么?
我需要一种方法来将1维值范围(即连续整数)随机分成k个部分.只需使用伪随机生成器来挑选分裂点,技术上就可以完成工作.然而,它允许范围的可能性非常小(相反非常大).我一直在寻找一种方法来解决这个问题,而不需要采用硬编码范围限制.
我找到了这篇文章.它涉及2d地形生成.但它面临同样的问题并提出了解决方案.你可以看到多边形部分,作者在那里提到劳埃德放松.整个事物的来源是Voronoi图,它适用于2d范围.此外,如果你看一下构建劳埃德放松需要的Voronoi图的算法,它开始于:
令*(z)为变换*(z)=(zx,zy + d(z)),其中d(z)是抛物线,最小值为z
当然,我在1d没有抛物线.
在我的1d范围的情况下,我不清楚如何获得相同的结果.或者可能有一个不同/更好的方法来解决这个问题?