点缀's Blog

用.NET点缀我们的生活
随笔 - 44, 评论 - 378, 引用 - 84

导航

关于

脊柱是我们这种生命的重要特征,在此基础上我们才有了光芒的智慧和丰富的情感。上帝赋予我们自由的意志,同时也赋予我们选择的重担。

标签

每月存档

最新留言

广告

自定义 VS.NET 2003

     以前在开发进总是把一些版权信息以及更新信息忘记。虽然有Ctrl+C(V) 但总是感觉很麻烦。今天看了一下VS.NET 的结构,找到可以解决这个问题的方法。原来,VS.NET 在添加类时是使用很多向导模板。不同的语言也有不同的模板,如C# 的所有模板在 X:\Program Files\Microsoft Visual Studio .NET 2003\VC#  中 。那我就可以开始动手了笑脸

找到 VC#目录下的  VC#Wizards\CSharpAddClassWiz 里面有一个 Template 目录,打开,又是一个 叫 2052 的目录(2052 是中文 ID ),目录里有我们要的 NewCSharpFile.cs 文件,打开它进行修改。

/*
功能说明:

最后更新: 点缀

更新时间:

CopyRight 2003 Weblogs.3322.org

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
*/

using System;

namespace [!output SAFE_NAMESPACE_NAME]
{
/// <summary>
/// [!output SAFE_CLASS_NAME] 的摘要说明。
/// </summary>
public class [!output SAFE_CLASS_NAME]
{
public [!output SAFE_CLASS_NAME]()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}
}
 

    保存这个文件。下面你再向你的工程里添加一个类试试。是不是很爽!!咧嘴笑脸  其实对这个模板进行修改可以做出很个性化的设定。

其实在MSDN 里有这方面的内容: 创建新的企业级模板构造块

posted on 2003-10-30 16:11:00 by aspdian  评论(2) 阅读(2366)

Queries the appropriate whois server for a given domain name and returns the results.

    很多域名注册服务商都有一个很COOL的服务,就是搜索某个域名得到它的详细注册信息。其实我们也能做到这一点。以下是一些重要性步骤:

1.得到你的Whois 服务器的地址:
    Dns.Resolve(cc + ".whois-servers.net").AddressList[0]  //cc 为一级域名。如 COM,NET,ORG等
2.连接Whois 服务器的 43 端口:
    s.Connect(new IPEndPoint(Dns.Resolve(cc + ".whois-servers.net").AddressList[0], 43));
3.最后发送你要查询的域名,以及回车结束:
    s.Send(Encoding.ASCII.GetBytes(domain + "\r\n"));
4.你就能收到域名的详细信息了。笑脸

你也可以使用telnet 来实现。如我要查询 www.163.com 的注册信息。
  telnet com.whois-servers.net 43[enter]
  163.com[enter]
 

posted on 2003-10-30 08:30:00 by aspdian  评论(7) 阅读(3702)

Code Tools (FxCop and Reflector )

FxCop 1.23

    FxCop is a code analysis tool that checks .NET managed code assemblies for conformance to the Microsoft .NET Framework Design Guidelines. It uses reflection, MSIL parsing, and callgraph analysis to inspect assemblies for more than 200 defects in the following areas: naming conventions, library design, localization, security, and performance . FxCop includes both GUI and command line versions of the tool, as well as an SDK to create your own rules.

Reflector for .NET

    Reflector is a class browser, decompiler and XML documentation browser for .NET components (assemblies). It features assembly and namespace views, type and member search, reference search, IL disassembler, C# decompiler, VB decompiler, C# XML documentation viewer, MSDN help viewer, dependency trees, supertype/subtype hierarchies and resource viewers. Function prototypes are displayed in C# and VB syntax.

posted on 2003-10-29 08:41:00 by aspdian  评论(2) 阅读(2096)

如何提高 ASP.Net 应用程序的性能

最近在开发一个专业的网站,在工作完成后对性能进行了一些测试与分析。发现很多值得我们注意的地方。

  系统有三层:Control (UI ) DataProvider (Data) Components (Base)

    后台使用MS Sql Server 2000 ,数据层通过 存储过程来完成所有的数据操作。并编写了一个IDataProvider 接口来定义所有的操作。UI 层只是通过调用IDataProvider 来实现所有的功能。

一开始我们使用的方法:

SqlDataProvider dp = new SqlDataProvider();
dp.Data_registerUser (User user);

   这样就有了一个问题,当一个页面包含大量
控件时,会产生很多的SqlDataProvider 对象,而SqlDataProvider 运行库到项目后期已经非常庞大(已经达到250K左右)。这样在.NET 中已经算80K以上的大对象了。大量创建大对象会非常严重地影响性能。

   那就没有好的方法来解决一下吗?其实,我们不需要创建怎么多对象的。只要有一个SqlDataProvider 对象在内存中就可以了。这样我们想到了 ASP.NET 中的 System.Web.Caching.Cache 类,我们对代码进行了修改。添加了一个类。

//---------------  缓冲 SqlDataProvider.SqlDataProvide ----
public class DataProvider
{
public static IDataProvide Instance()
{

Cache cache = System.Web.HttpContext.Current.Cache;

if ( cache["IDataProviderBase"] == null )
{

String assemblyPath = "SqlDataPrvider.dll"; 
String className = "SqlDataProvider.SqlDataProvide";
assemblyPath = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/bin/" + assemblyPath);
try
{
cache.Insert( "IDataProvide", Assembly.LoadFrom( assemblyPath).GetType( className ).GetConstructor(new Type[0]), new CacheDependency( assemblyPath ) );
}
catch (Exception)
{
HttpContext.Current.Response.Write("<b>ERROR:</b> Could not locate file: <code>" + assemblyPath + "</code> or could not locate class <code>" + className + "</code> in file.");
HttpContext.Current.Response.End();
}
}
return (IDataProvide)( ((ConstructorInfo)cache["IDataProvide"]).Invoke(null) );
}
}

//--------------修改后的代码------
IDataProvide dp = DataProvider.Instance();
dp.Data_registerUser (User user);

 

   通过改造,系统性能得到很大的提高。但系统还有几个可以进行性能优化的地方。如:常用数据的缓冲,分页数据存储过程等。

posted on 2003-10-29 08:39:00 by aspdian  评论(11) 阅读(4529)

Downloads the specified file

新的方法,通过JScript 来读取服务端文件的方法。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<script language=jscript >
function init()
{
divBuildStamp.startDownload( "buildnumber.txt", onDownloadDone );
}
function onDownloadDone弯月
{
divBuildStamp.innerText = "Build: " + s;
}
</script>
<body onload="init()">
<SPAN ID="divBuildStamp" STYLE="behavior: url(#default#download); color: silver; font-size: 8pt;"></SPAN>
</body>
</html>

posted on 2003-10-29 08:37:00 by aspdian  评论(8) 阅读(1488)

Virtual Editable ComboBox

Add a combobox to the form.
Add a textbox to the form.
Size of combobox = x, y (eg. 100, 22)
Size of textbox = x-12, y (eg. 88, 20)
Location needs to match. (eg. 70, 124)

this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);

private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
textBox1.Text = comboBox1.Text;
}

Add the following to the form load event:
comboBox1.Items.Add("Item 1");
comboBox1.Items.Add("Item 2");
comboBox1.Items.Add("Item 3");

Issues:
You have to double click textbox to give it focus.
SelectAll method doesn't work.

Notes:
You can also use a textbox, listbox, and a button to create a virutal editable combobox.

Consider adding the following to the load event to advoid specifing the width and location of the controls:
textBox1.Bounds = comboBox1.Bounds;
textBox1.Width = comboBox1.Width - 12;

posted on 2003-10-28 10:31:00 by aspdian  评论(2) 阅读(1798)

Using log4net

 很多开发者都想要一个非常强大的程序日志管理库,能够了解用户对应用程序的使用情况。当程序出现问题时,可以通过分析日志来了解问题之所在。
    过去我们总是用一种很简单的方式来处理日志,即:使用一个日志文件,当程序有问题时就要求用户提供这个文件。但常常日志文件不是没有,就是已经被删除。

 Log4net 是著名的 log4j for Java 项目的一部分。它是由 www.neoworks.com 的一个团队开发出来,支持多种方式的日志。如 ADO (MS Sql Server 等),File (文件), Console (控制台),EventLog (系统日志),SMTP(邮件方式)...

而且支持所有的.Net 平台:

  • Microsoft .Net Framework 1.0 (1.0.3705)
  • Microsoft .Net Framework 1.1 (1.1.4322)
  • Microsoft .Net Compact Framework 1.0 (1.0.5000)
  • Mono 0.25 or higher (Linux 下的)
  • Microsoft Shared Source CLI 1.0 (就是MS 开发源代码的 .Net 运行库)

 如果你要了解更详细的信息:
  log4net Site  (好象下载有点问题,怎么也下载不了。也有可能是我这边网络的问题)
  Using  log4Net  (一篇很专业的使用指南,花了不少时间才找到的)
  log4net.dll  (我找到的编译好的 log4net.dll 文件,可以直接加入你的工程。)

posted on 2003-10-24 17:30:00 by aspdian  评论(6) 阅读(9050)

写在提问之前

 

    最近有很多的朋友在网站提出很多问题。MSN,QQ上提问的人更加的多。我们有一帮好学的朋友,有一大批进取的程序员,这是值得庆贺的。中国的IT技术界绝不会比任何国家的差。

    可是当我一遍又一遍也回答一些问题的同时,又在想其它的问题?为什么大家都在问很相近的问题?为什么一个问题会有好多人在问?甚至一个人同一个问题要问好多遍?

    问,在我们从小的教育中很受重视。我还记得小学时老师总是表扬一些常常提问的学生,问已经成为了一种很重要的知识来源。甚至已经是很多人解决问题的首选方式。但我想,这也许使我们失去了思考的习惯,失去了独立解决问题的能力。我很难想象一个成功的开发者是靠问起家的。其实学习的过程很重要,甚至应该很艰苦,我们的成长应该是在这些过程中,而不是什么结果。

    有一个网友问我,怎么做一个ASP.Net 程序的安装包,我说你可以去看看MSDN的文档,他好象很失望,并要求我最好能给他写一个例子。多么好学的朋友,说实在的我应该给他写这个例子,不管我有没有这个时间。但我回过头来又想了想,不行,不能写给他。应该让他自己来写,应该让他自己来看文档写例程。这个安装包可能不是他最需要的,这个看文档写例程的过程也许是他最需要的。

    还有一个网友更加的有趣,她好象什么也不懂,但好象什么也懂一点。她提的一个问题可以会引出整个大学一年课程的问题。我最后只想说一句:“谁是你大学的老师,我想见见他!!”

    说了怎么多,大家要问我了,你到底想说点什么?那好,我只是想请大家在提问前考虑几个问题,如果这些问题答案都是肯定的,那你就问吧,而且你会从中学到你想要的。

 1. 这个问题在别人看来难不难?
    对别人来说不难的问题,那就是说明自己还很菜,当处于很菜的时候,我们最需要的不提问,而是独立的有计划的学习。因为这时的你道处是问题,问题无从提起。
 2. 你已经思考过了吗?
    前面我说过了思考的过程比提问本身更加重要。从来没有大师是从提问开始的,他们都是思考的强者。
 3. 这个问题以前我问过吗?
    如果一个问题我已经提过好几次,那他的学习方法上的问题就是他最优先要被提出来的。
 4. 我查找过专业的资料吗?
    如果当我们还没有找资料之前,就草率地把问题提出来,只能证明我们的无知与懒惰,不可能会证明我们的好学。google怎么好为什么我们要浪费它呢?
 5. 我已经对这个问题的产生有很深的了解吗?
    当我们找专业的资料过程中,应该不是去直接地去找问题的答案,通常也不可能找到。我们应该去找问题的症节,了解整个问题来龙去脉。其实不是去找,而是去理解问题。
 6. 别人会不会有时间来处理这个问题?
    当一个问题自己感觉会很大时,最好自己去解决它,如:怎么来策划一个项目?什么是软件工程?DotNet 是什么?很多人都有自己的工作要完成,不可能为了你的一个问题来帮助你回忆,甚至补习大学的课程,也没有这个义务。
 7. 我确定问题就是出在这里吗?
    有了以上的基础,我们基本上就对问题本身有了一个了解,这时候可能会突然发现问题已经变了。

    最后给大家一点建议,不要太小看自己了,也许你能够独自完成,Why Not?还有要请高手们不要写什么入门的教程了,快餐是无奈之选。不要让它真的成为了一种文化。您们的智慧很重要,不要去浪费在一次次重复回答中,您应该写出更深刻的文章(记住不是教程)。

posted on 2003-10-22 11:41:00 by aspdian  评论(4) 阅读(1799)

Powered by: Joycode.MVC引擎 0.5.2.0