这个网站上已经存在很多性能问题,但是我发现几乎所有这些都是特定于问题且相当狭窄的问题.几乎所有人都重复这些建议,以避免过早优化.
我们假设:
我在这里寻找的是在一个关键算法中挤出最后几个百分点的策略和技巧,除此之外别无他法.
理想情况下,尝试使答案语言不可知,并在适用的情况下指出建议策略的任何缺点.
我将使用我自己的初步建议添加回复,并期待Stack Overflow社区可以想到的任何其他内容.
我需要根据存储在数据库中的类型创建一个通用对象.我该如何实现这一目标?下面的代码(不会编译)解释了我的意思:
string typeString = GetTypeFromDatabase(key);
Type objectType = Type.GetType(typeString);
//This won't work, but you get the idea!
MyObject<objectType> myobject = new MyObject<objectType>();
Run Code Online (Sandbox Code Playgroud)
有可能做这种事吗?
谢谢
我正在计划一些工作,将依赖注入引入当前的大型单片库,试图使库更容易进行单元测试,更容易理解,并可能更灵活地作为奖励.
我决定使用NInject,我真的很喜欢Nate的"做一件事,做得好"(转述)的座右铭,而且它似乎在DI的背景下特别好.
我现在想知道的是,我是否应该将当前单个大型装配拆分为具有不相交特征集的多个较小装配.这些较小的程序集中的一些将具有相互依赖性,但远非所有这些程序集,因为代码的体系结构已经非常松散地耦合.
请注意,这些功能集不是微不足道的,也不是很小......它包含客户端/服务器通信,序列化,自定义集合类型,文件IO抽象,常用例程库,线程库,标准日志记录等.
我看到前一个问题:什么是更好的,许多小型装配,或一个大装配?有点解决这个问题,但是看起来更精细的粒度,这让我想知道那里的答案是否仍适用于这种情况?
此外,在接近这个主题的各种问题中,一个常见的答案是,"太多"集会导致了未指明的"痛苦"和"问题".我真的想要具体了解这种方法可能存在的缺点.
我同意在仅需要1个之前添加8个组件是"有点痛苦",但是必须为每个应用程序包含一个大的单片库也不是完全理想的...加上8个组件只是你做的事情曾经,所以我对这个论点很少有同情心(即使我最初可能会和其他人一起抱怨).
附录:
到目前为止,我已经看到没有针对小型装配的任何理由,所以我想我现在将继续进行,好像这是一个非问题.如果有人能够用可验证的事实来考虑好的可靠理由来支持它们,我仍然会非常有兴趣了解它们.(我会尽快增加赏金以提高知名度)
编辑:将性能分析和结果移到单独的答案中(见下文).
解释我的意思的最简单方法是使用代码示例.这不能编译,但有没有办法实现这个效果:
foreach(Type someType in listOfTypes)
{
SomeMethod<someType>();
}
Run Code Online (Sandbox Code Playgroud)
如果可行的话会非常方便,但事实并非如此.是否有其他方法可以实现与上述相同的事情,为什么C#不允许这是一个法律声明?
编辑:似乎唯一的方法是通过反射,这可能对我们的需求来说太慢了.任何洞察为什么没有内置的有效方法以及这样的事情是否适用于C#4.0?
有没有人知道GitHub中是否有一个机制:企业设置一个通用的post-receive钩子,它将应用于所有存储库(包括新的存储库一旦创建它们?)
我正在尝试开发一个二级系统的链接,该系统希望获得所有存储库的所有推送通知,并且需要手动设置每个新存储库只是时间问题才会被遗忘.
如果我有通用类:
public class GenericTest<T> : IGenericTest {...}
Run Code Online (Sandbox Code Playgroud)
我有一个Type的实例,我通过反射得到了,我怎么能用该Type实例化GenericType?例如:
public IGenericTest CreateGenericTestFromType(Type tClass)
{
return (IGenericTest)(new GenericTest<tClass>());
}
Run Code Online (Sandbox Code Playgroud)
当然,上面的方法不会编译,但它说明了我正在尝试做的事情.