Nginx性能概述
2010-03-25 21:04
162 查看
通过字符串对控件属性赋值
例如:"BackColor=Color.FromArgb(100,100,100);BackGroundimage=Image.FromFile(\"XXX\")"
其中最关键的部分算是获取动态代码的值.以下为获取动态代码值的类,不足之处还请指正.
------------------------------------------------
下面是调用(注意调用时特殊字符的转义)
例如:"BackColor=Color.FromArgb(100,100,100);BackGroundimage=Image.FromFile(\"XXX\")"
其中最关键的部分算是获取动态代码的值.以下为获取动态代码值的类,不足之处还请指正.
------------------------------------------------
1 usingMicrosoft.CSharp; 2 usingSystem.Reflection; 3 using System.CodeDom.Compiler; 4 5 public static class CSharpCodeValueHelper<T> 6 { 7 /// <summary> 8 /// 编译器实例 9 /// </summary> 10 private static CSharpCodeProvider CSharpCodeProvider { get; set; } 11 12 /// <summary> 13 /// 编译器参数 14 /// </summary> 15 private static CompilerParameters CompilerParameters { get; set; } 16 17 /// <summary> 18 /// 构造函数 19 /// </summary> 20 static CSharpCodeValueHelper() 21 { 22 CSharpCodeProvider = new CSharpCodeProvider(); 23 24 CompilerParameters = new CompilerParameters(); 25 CompilerParameters.ReferencedAssemblies.Add("System.dll"); 26 CompilerParameters.ReferencedAssemblies.Add("System.Data.dll"); 27 CompilerParameters.ReferencedAssemblies.Add("System.Deployment.dll"); 28 CompilerParameters.ReferencedAssemblies.Add("System.Drawing.dll"); 29 CompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll"); 30 CompilerParameters.ReferencedAssemblies.Add("System.Xml.dll"); 31 CompilerParameters.GenerateExecutable = false; 32 CompilerParameters.GenerateInMemory = true; 33 } 34 35 /// <summary> 36 /// 获取代码的值 37 /// </summary> 38 /// <param name="CSharpCode">CSharpCode代码</param> 39 /// <returns>动态CSharpCode代码的值</returns> 40 public static T GetCodeValue(string CSharpCode) 41 { 42 CompilerResults compilerResults = CSharpCodeProvider.CompileAssemblyFromSource(CompilerParameters, CreateCode(CSharpCode)); 43 44 if (compilerResults.Errors.HasErrors) 45 { 46 string errorString = string.Empty; 47 errorString += "编译错误:\n"; 48 foreach (CompilerError err in compilerResults.Errors) 49 { 50 errorString += err.ErrorText + "\n"; 51 } 52 throw new Exception(errorString); 53 } 54 else 55 { 56 // 通过反射,调用动态类DynamicClass实例 57 Assembly assembly = compilerResults.CompiledAssembly; 58 object dynamicClass = assembly.CreateInstance("DynamicNamespace.DynamicClass"); 59 MethodInfo methodInfo = dynamicClass.GetType().GetMethod("GetValue"); 60 61 return (T)methodInfo.Invoke(dynamicClass, null); 62 } 63 } 64 65 /// <summary> 66 /// 创建代码 67 /// </summary> 68 /// <param name="CSharpCode">CSharpCode代码</param> 69 /// <returns>创建完成的代码</returns> 70 private static string CreateCode(string CSharpCode) 71 { 72 StringBuilder strBuilder = new StringBuilder(); 73 strBuilder.AppendLine("using System;"); 74 strBuilder.AppendLine("using System.Collections.Generic;"); 75 strBuilder.AppendLine("using System.ComponentModel;"); 76 strBuilder.AppendLine("using System.Data;"); 77 strBuilder.AppendLine("using System.Drawing;"); 78 strBuilder.AppendLine("using System.Text;"); 79 strBuilder.AppendLine("using System.Windows.Forms;"); 80 81 strBuilder.AppendLine("namespace DynamicNamespace"); 82 strBuilder.AppendLine("{"); 83 strBuilder.AppendLine(" public class DynamicClass"); 84 strBuilder.AppendLine(" {"); 85 strBuilder.AppendLine(" public object GetValue()"); 86 strBuilder.AppendLine(" {"); 87 strBuilder.AppendLine(" return " + CSharpCode + ";"); 88 strBuilder.AppendLine(" }"); 89 strBuilder.AppendLine(" }"); 90 strBuilder.AppendLine("}"); 91 92 string code = strBuilder.ToString(); 93 return code; 94 } 95 } 96 97 98 99 100
下面是调用(注意调用时特殊字符的转义)
1 Color coor = CSharpCodeValueHelper<Color>.GetCodeValue("Color.FromArgb(100,100,100)"); 2 3 4 Image img = CSharpCodeValueHelper<Image>.GetCodeValue("Image.FromFile(\"C:\\\\tu.jpg\")");
相关文章推荐
- API Gateway性能比较:NGINX vs. ZUUL vs.Cloud Gateway vs. Linkerd[译]
- Apache Nginx lighttpd HAProx Litespeed 缓冲原理解析fastcgi性能
- 为什么Nginx的性能要比Apache高得多?
- Nginx配置性能优化
- 设置NGINX进程分配至多核CPU提升性能
- Nginx 的线程池与性能剖析
- Nginx性能优化
- nginx 提高性能原理
- memc-nginx-module模块和php-fpm访问memcache性能比较
- centos 7上nginx+uwsgi 性能调优
- perf+flamegraph 分析 nginx-rtmp 性能
- mysql 性能优化概述
- 概述 RequireJS是一个工具库,主要用于客户端的模块管理。它可以让客户端的代码分成一个个模块,实现异步或动态加载,从而提高代码的性能和可维护性。它的模块管理遵守AMD规范(Asynchronou
- nginx本身不能提高性能
- 为什么Nginx的性能要比Apache高很多?
- 使用socket方式连接Nginx优化php-fpm性能
- 性能优化(一)方法概述
- Nginx基本配置、性能优化指南
- Nginx概述(一)
- Nginx 性能调优