我在使用WinForms一段时间后开始编写ASP.NET Web应用程序。在经历了几次试错错误之后,我终于意识到这两者有多么不同。我想知道很多关于C#的高级内容我从未学过琐碎的东西,在推进一些更难的东西之前我应该这样做,所以我在这里问,因为有些问题可以解决通过教程而不是开发人员的经验来回答,所以我将开始:
在GDI +中使用图形时这是正确的方法吗?
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..
}
关于静态方法:
我有一堆不适合任何实例类的方法,比如我在app的不同部分需要的一些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,那么检查对象是否为空是否真的很麻烦:
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;
关于异常处理: 我读过几个例子,比如“不要抓住你无法处理的例外”,这是什么意思?
为什么把try / catch“只是为了确保应用程序不会在方法中出现错误而不是性能?
答案 0 :(得分:1)
仅捕获您要处理的异常。
因为最好让你的应用程序崩溃,而不是继续执行并说清除所有用户数据,或者向每个客户发送电子邮件,或者打开切割器,而某些人有头脑,或者甚至这样做远离问题发生的地方,调试它是一个母马。
有些情况下,使用try catch和swallow是合理的,但它们是例外......
答案 1 :(得分:0)
一次一个绅士请...
空检查。 是的。如果确保不返回null。所以,如果不是这样,会发生什么。
null是一个有效的论证,你做其他事情(比如什么都没有),或者不是在哪种情况下你应该抛出一个参数null异常尽可能接近问题。否则你最终会得到Spaghetti对象。
答案 2 :(得分:0)
您在asp.net应用中使用System.Drawing。除非you do absolutely everything right,否则这是一个坏主意。在多个页面事件的过程中修改它是一个特别糟糕的想法,因为如果发生异常,位图永远不会被处置(GC将Bitmap实例视为1kb对象,而实际占用20-100MB)。
WPF也容易出现类似的错误,但在崩溃之前会稍微扩展一下。基本上,如果您在asp.net应用程序中使用Bitmaps和Images等大对象,则必须手动管理内存以防止进程快速耗尽内存。
我的建议是use asp.net-safe library,或者在单独的指令队列中收集需要对位图进行的更改,并使用{}()子句在单个位置内完成所有位图处理。 / p>