C# 哪种方法可以从动态加载程序集的帮助器类中获得更好的结果
我正在为企业解决方案编写一个数据适配器 为了使其可扩展,我将其设计为:C# 哪种方法可以从动态加载程序集的帮助器类中获得更好的结果,c#,.net,design-patterns,architecture,C#,.net,Design Patterns,Architecture,我正在为企业解决方案编写一个数据适配器 为了使其可扩展,我将其设计为: 只有一个接口定义所有数据方法的签名 这个接口在各种低级适配器中实现,方法在这些适配器中实现,这些适配器像SqlAdapter、OracleAdapter、MySqlAdapter、XmlAdapter等。它们在2MB左右不是很大 我已经创建了一个Facade层,它在运行时使用configuration和底层适配器调用bind,并调用它的方法 这个外观在使用者之间共享,他们可以使用它调用方法,而不需要知道底层适配器 为了创建一
假设每秒向服务器发送1000个请求。我将通过一个静态类包装对工厂的调用,该类可能是“FactoryInitializer”,它有一个接受适配器类型的通用方法,例如:
public interface IDataAdapter
{
//Your methods
}
internal class SqlAdapter : IDataAdapter
{
//This is your concrete class where a specific adapter related stuff goes
//You can create more of these concrete types as separate classes.
}
internal class BaseFactory
{
public virtual IDataAdapter GetDataAdapter()
{
return null;
}
}
internal class SqlFactory : BaseFactory
{
public override IDataAdapter GetDataAdapter()
{
return new SqlFactory();
}
}
internal static class FactoryInitializer
{
public static IDataAdapter LoadAdapterOf<T>() where T : BaseFactory, new()
{
var factory = new T();
return factory.GetDataAdapter();
}
}
公共接口适配器
{
//你的方法
}
内部类SqlAdapter:IDataAdapter
{
//这是一个具体的类,其中包含与适配器相关的特定内容
//您可以创建更多这些具体类型作为单独的类。
}
内部类基工厂
{
公共虚拟IDataAdapter GetDataAdapter()
{
返回null;
}
}
内部类SqlFactory:BaseFactory
{
公共重写IDataAdapter GetDataAdapter()
{
返回新的SqlFactory();
}
}
内部静态类FactoryInitializer
{
公共静态IDataAdapter LoadAdapterOf(),其中T:BaseFactory,new()
{
var factory=newt();
返回factory.GetDataAdapter();
}
}
然后将其用作:
var sqlAdapter = FactoryInitializer.LoadAdapterOf<SqlFactory>();
var sqlAdapter=FactoryInitializer.LoadAdapterOf();
为了更快、更可预测的实例化,应该预加载包含适配器实现的所有程序集。这是相当昂贵的操作。在此之后,您基本上有三个选择:
UPD:如果您选择第一个选项,并且将有太多和/或太大的适配器故障太长时间的内存问题,那么您可能需要考虑从“实时”处理模型切换到延迟处理。创建一个请求队列,实时推送请求,并使用某种调度器批量处理它们。
您考虑过工厂设计模式吗???@AzharKhorasany我已经添加了更多细节为什么是匿名否定点?我认为您的瓶颈将与服务器通信本身有关,C#对象的实例化/单例访问不适用。@ChrisSinclair您的意思是任何一种方法都可以,两种模型都可以一次处理1000个请求,结果率更高?程序集不太大,LoadFrom
不会重新加载已加载的程序集。但在预热阶段预加载程序集和预分配对象(如有必要)将使您免于在请求处理阶段遇到棘手的问题。