磕磕绊绊学了那么久了,一直懒得写文章,遇到技术问题,总是在别人的博客上找到答案。现在才体会到写博客的好处,既是对个人经验的总结,也使对别人的启示与帮助,同时也利于自己今后方便的查阅。
现在打算总结一些,以后会不断补充,以后遇到问题,也可以查自己的博文了,呵呵
1、获取当前程序目录
private string GetApplicationDirectory()
{
return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName);
}
2、windows 绘制字符串
当窗体上放置picturebox等容器控件时,在窗体上重写OnPaint ( PaintEventArgs e )事件,绘制的图形将被picturebox覆盖,此时应直接在容器控件上绘制,具体代码如下:
//注册事件
this.pictureBox1.Paint+=new PaintEventHandler(pictureBox1_Paint);
//绘制“Hello World!”字符串
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
//不使用样式,在当前窗体上绘制文字
Graphics g = e.Graphics;
Brush brush = new SolidBrush(Color.LawnGreen);
Font font = new Font("楷体GB-2312", 15, FontStyle.Bold);
g.DrawString("Hello World!", font, brush, 20, 20);
brush.Dispose();
font.Dispose();
}
3、IIS权限
使用web服务时,程序直接运行正常,但部署在IIS上后,报错“客户端f发现响应类型为text/html,实际应为text/xml”,出现这种情况通常是由于IIS权限问题导致。
解决办法:
1、允许匿名访问,并设置匿名访问用户具有访问该站点的权限(通常该用户为IUSER),根据需要赋予读写权限;
2、设置IIS临时文件夹权限改为“读写”(该文件夹位于C:\Windows\Microsoft.NET\Framework\v2.0.50727下);
4、xml文件处理
1)使用 XmlTextReader 和 XmlTextWriter 代替 XmlDocument(因为它占用的内存较多)。
2)指定 XmlReaderSettings 和 XmlWriterSettings 的设置以改善性能。如果可以使用,IgnoreWhitespace 和 IgnoreComments 两个属性值将显著提高性能。
3)使用 UTF-8、ASCII 和 UTF-16 字符编码,它们比 ANSI 和 Windows 代码页编码更快。
4)避免使用用于分析的架构,因为这种架构需要更多的验证工作。
5)在从 XML 源填充 DataSet 时,应将列映射为属性并使用类型化 DataSet。
填充 DataSet 时,应避免填充以下各项:
架构推理;
嵌套表。;
多个 DateTime 列。为了获得更好的性能,请改用 Ticks 属性值。
使用 XML 反序列化时,遵循以下准则可改善性能:
使元素和属性名尽量保持简短,因为每个字符都必须经过验证。
基于属性数据的 XML 比基于元素数据的 XML 要快。
如果适用,使用 XmlNodeReader..::.Skip 方法。
如果性能很重要,应考虑二进制序列化。
为 XML 序列化的每一种类型分别使用一个 XmlSerializer 实例,以减少用于搜索元数据的时间。
由于序列化大量 XML 可能会耗尽内存,应考虑通过使用 BinaryReader 和 BinaryWriter 生成自定义二进制序列化机制。
5、xml解析及生成例子
using System.XML;
using System.IO;
//读取XML
private void LoadXMLContent()
{
string mStr = testConstantStr.TestXMLValue;
StringReader s = new StringReader(mStr);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true; //忽略空白
settings.IgnoreComments = true; //忽略注释
XmlReader reader = XmlReader.Create(s, settings);
while (reader.Read())
{
if(reader.IsStartElement())
{
switch (reader.Name)
{
case "PATNAME":
label1.Text = string.Format("姓名:{0}", reader.ReadString());
break;
case "cbxEducateDegree":
label3.Text = string.Format("教育程度:{0}", reader.ReadString());
break;
default:
break;
}
}
}
reader.Close();
}
//生成XML
public string CreateXMLContent()
{
//StringBuilder output = new StringBuilder(); //使用stringBuilder无法指定xml编码格式
MemoryStream output = new MemoryStream();
XmlWriterSettings setting = new XmlWriterSettings();
Encoding mEncoding=Encoding.GetEncoding("GB2312");
setting.Encoding = mEncoding;
setting.Indent = false;
setting.OmitXmlDeclaration = false;
XmlWriter writer = XmlWriter.Create(output, setting);
writer.WriteStartDocument();
writer.WriteProcessingInstruction("xml-stylesheet"," href=\"xml文件格式.xsl\" type=\"text/xsl\"");
writer.WriteStartElement("Students");
writer.WriteComment("学生类,描述学生整体性信息");
writer.WriteStartElement("Student");
writer.WriteComment("描述学生个体信息");
writer.WriteElementString("id", "001");
writer.WriteElementString("name", "tom");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
byte[] b=output.ToArray();
string str = System.Text.Encoding.Default.GetString(b,0,b.Length);
return str;
}
生成结果为:
<?xml version="1.0" encoding="utf-16"?>
<?xml-stylesheet href="xml文件格式.xsl" type="text/xsl"?>
<Students><!--学生类,描述学生整体性信息-->
<Student><!--描述学生个体信息-->
<id>001</id>
<name>tom</name>
</Student>
</Students>