繁体   English   中英

ASP.NET中的类将采用什么方式?

[英]What will be the way to go with classes in ASP.NET?

在我的asp.net网络应用中。 我在命名空间WPP下有三个类(位于app_code文件夹中),如下所示:

1. wpp_Common
2. wpp_SQL
3. wpp_Admin

所有这些类都包含我在应用程序中用来完成不同任务的不同功能。 例如, wpp_common包含一个使我的URL进行wpp_common的功能,而wpp_SQL具有一些用于从数据库获取详细信息的功能。

现在,我在不同的网页网页和Web控件中使用这些类。 要使用这些类,我将在使用它们的页面上创建所有三个类的实例。

protected WPP.wpp_Common ObjCommon = new WPP.wpp_Common();
protected WPP.wpp_SQL ObjSQL = new WPP.wpp_SQL();
protected WPP.wpp_Admin ObjAdmin = new WPP.wpp_Admin();

因此,我想知道,这是通过在每个页面上创建单独的实例来访问我的类的更好且唯一的方法,该方法是否具有任何性能约束。

还是有一种更好的逻辑方法从ASP.net网页和Web控件访问我的类。

谢谢。

如果这些类没有封装任何可变的东西,则可能有必要使使用的关键方法静态化。 然后,您甚至不需要该类的实例。 这对于您的SEO课程似乎很有意义。 您可能需要共享实例的SQL类,因为它可能包含对某些SQL连接/类的引用,但这也可以是静态方法中的参数。

不过,您的操作对我来说似乎还可以。

答案确实归结为课堂的复杂性。 如果您的类是轻量级的并且初始化开销很低,那么您每次可能都可以使用实例化对象。 (糟糕的是,即使ASP.NET运行时每次也都在经典ASP.NET中创建页面对象的新实例-不确定MVC)。

但是,如果您的对象有很短的初始化时间(在构造函数中或在第一个方法调用时进行大量处理),那么您可能需要查看两个选项:

一)将对象存储在会话中-在这里要小心,因为根据后端会话存储(内存,sql等),对象的行为可能有所不同。

MyHeavyObj obj = (MyHeaveyObj) Session["cachedObj"];

if (obj == null)
{
    obj = new MyHeavyObj();
    obj.Init();
    Session["cachedObj"] = obj;
}

obj.DoSomething();

二)编写自己的Windows服务,该服务通过远程处理为对象提供服务并在内部进行初始化。 这里的缺点是您需要确保服务随着流量的增长而扩展。

MyHeavyObj obj = GetHeavyObjViaRemoting();

obj.DoSomething();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM