C# 静态方法,GDI+;,处理琐碎问题的异常
在使用WinForms一段时间后,我开始编写ASP.NET web应用程序。经过几次尝试错误后,我终于意识到这两个问题有多大的不同。虽然我知道很多关于C的高级知识,但在学习一些更难的知识之前,我从来没有学过我应该学的琐碎知识,所以我在这里提问,因为有些问题不能通过教程来回答,而是通过开发人员的经验,所以我将开始: 在GDI+中处理图形时,哪种方法正确C# 静态方法,GDI+;,处理琐碎问题的异常,c#,asp.net,exception-handling,null,gdi+,C#,Asp.net,Exception Handling,Null,Gdi+,在使用WinForms一段时间后,我开始编写ASP.NET web应用程序。经过几次尝试错误后,我终于意识到这两个问题有多大的不同。虽然我知道很多关于C的高级知识,但在学习一些更难的知识之前,我从来没有学过我应该学的琐碎知识,所以我在这里提问,因为有些问题不能通过教程来回答,而是通过开发人员的经验,所以我将开始: 在GDI+中处理图形时,哪种方法正确 Bitmap bitmap; Graphics g; protected void Page_Load(object sender, Event
Bitmap bitmap;
Graphics g;
protected void Page_Load(object sender, EventArgs e)
{
Bitmap bitmap = new Bitmap(200,200);
Graphics g = Graphics.FromImage(bitmap);
}
public void SomeMethod()
{
g.DrawRectangle(somePen,someRectangle);
}
public void SomeOtherMethod()
{
g.DrawRectangle(someOtherPen,someOtherRectangle);
}
例如:
Bitmap bitmap;
Graphics g;
protected void Page_Load(object sender, EventArgs e)
{
Bitmap bitmap = new Bitmap(200,200);
Graphics g = Graphics.FromImage(bitmap);
}
public void SomeMethod()
{
g.DrawRectangle(somePen,someRectangle);
}
public void SomeOtherMethod()
{
g = Graphics.FromImage(bitmap);
g.DrawRectangle(someOtherPen,someOtherRectangle);
}
例如:
Bitmap bitmap;
protected void Page_Load(object sender, EventArgs e)
{
Bitmap bitmap = new Bitmap(200,200);
}
public void SomeMethod()
{
Graphics g = Graphics.FromImage(bitmap);
g.DrawRectangle(somePen,someRectangle);
//Dispose pens,graphics..
}
public void SomeOtherMethod()
{
Graphics g1 = Graphics.FromImage(bitmap);
g1.DrawRectangle(someOtherPen,someOtherRectangle);
//Dispose pens,graphics..
}
关于静态方法:
我有很多方法不适合任何实例类,比如我在应用程序的不同部分需要的一些SQL方法:
- 如果我要创建新的实例类,请将它们全部放在其中。当我 需要其中一个来创建我需要的新实例和调用方法
- 我应该创建新的静态类并调用我需要的静态类吗 不创建实例
Static Int ID = 0;
UserA triggers some Sql method to fetch his ID into variable ID.
UserB comes to site and the ID value is UserA ID
静态方法中本地定义的变量是否具有这种行为?
使用静态方法会有这样的危险吗
关于空值:
如果您确保在可为null的类型变量上使用的方法不返回null,那么检查对象是否为null是否真的很有必要:
List<string> list = new List<string>();
//List can only become null if we call some method that returns null or if we do
list = null;
List List=新列表();
//只有当我们调用某个返回null的方法或我们这样做时,列表才能变为null
列表=空;
关于异常处理:
我读过一些类似“不要捕捉你无法处理的异常”的文章,这是什么意思
为什么将try/catch“只是为了确保应用程序不会出错”放在方法中而不是性能错误?请一次一个 空检查。 是的。如果您确保不返回null。如果不是这样,会发生什么
null是有效的参数,您可以执行其他操作(例如nothing),或者不是,在这种情况下,您应该抛出一个尽可能接近问题的参数null异常。否则,您将得到意大利面对象。您将要处理的只有陷阱异常 因为让你的应用程序崩溃比继续执行并说清除所有用户数据、给每个客户发送电子邮件、在某个家伙把头埋在下面的时候打开切割器、甚至远离问题发生的地方要好得多,调试它是一件苦差事
在某些情况下,使用try-catch和swallow是合理的,但它们是例外…您正在asp.net应用程序中使用System.Drawing。那是个坏主意,除非。在多个页面事件的过程中修改它是一个特别糟糕的主意,因为如果发生异常,位图永远不会被处理(GC将位图实例视为1kb对象,而实际上它占用了20-100MB) WPF也容易出现类似的错误,但在崩溃之前会扩展得更远一些。基本上,如果在asp.net应用程序中使用位图和图像等大对象,则必须手动管理内存,以防止进程快速耗尽内存
我的建议是,或者在单独的指令队列中收集需要随时间对位图所做的更改,并在单个using{}()子句中完成所有位图处理。Hi!你能把你的问题分成3个不同的问题吗?@rodrigovedovato我到现在还没有时间检查答案,我猜没有必要再分开了,对不起。你的观点真的很好。这个库真的很好,但我需要实际的绘图,而不仅仅是图像转换。最好的办法是在一个using{}()子句中处理位图,这在我看来是最无痛的。谢谢你的澄清,我真的没有在我的应用程序中滥用Try-Catch,只是为了将来参考。这个问题有很多正确答案,但只有一个错误,吞下一个你没有可靠的方法来处理的东西,它会发生在最尴尬的时候,当你最不能应付的时候,让你在每个人和他的狗面前看起来像个无能的人(