首页 文章 精选 留言 我的

精选列表

搜索[c ],共10018篇文章
优秀的个人博客,低调大师

C# Lazy Loading

前言 按需加载对象延迟加载实际是推迟进行创建对象,直到对其调用后才进行创建初始化,延迟(懒加载)的好处是提高系统性能,避免不必要的计算以及不必要的资源浪费。 常规有这些情况: 对象创建成本高且程序可能不会使用它。 例如,假定内存中有具有 Orders 属性的 Customer 对象,该对象包含大量 Order 对象,初始化这些对象需要数据库连接。 如果用户永远不要求显示 Orders 或在计算中使用该数据,则无需使用系统内存或计算周期来创建它。 通过使用 Lazy 来声明 Orders对象用于迟缓初始化,可以避免在不使用该对象时浪费系统资源。 对象创建成本高,且希望将其创建推迟到其他高成本操作完成后。 例如,假定程序在启动时加载多个对象实例,但是只需立即加载其中一部分。 可以通过推迟初始化不需要的对象,直到创建所需对象,提升程序的启动性能。(来源官方) 示例 创建用户类 public class User { public string Name { get; set; } public int Age { get; set; } public User() { this.Name = "Name"; this.Age = 0; } } 默认情况下,Lazy 对象是线程安全的。 也就是说,如果构造函数没有指定线程安全性的类型,该函数创建的 Lazy 对象是线程安全的。 在多线程方案中,访问线程安全 Lazy 对象的 Value 属性的第一个线程会为所有线程上的所有后续访问对其初始化,且所有线程共享相同的数据。 因此,哪个线程初始化对象并不重要,争用条件是良性的。 class Program { static void Main(string[] args) { Lazy<User> user = new Lazy<User>(); ThreadLocal<User> threadLocal = new ThreadLocal<User>(); if (!user.IsValueCreated) Console.WriteLine("The object is not initialized"); Console.WriteLine(user.Value.Name); user.Value.Name = "Name1"; user.Value.Age = 1; Console.WriteLine(user.Value.Name); Console.Read(); } } 对象的线程安全性 LazyThreadSafetyMode mode 参数 布尔 isThreadSafe 参数 没有线程安全性参数 完全线程安全;一次只有一个线程尝试初始化值。 ExecutionAndPublication true 可以。 非线程安全。 None false 不适用。 完全线程安全;线程争用以初始化值。 PublicationOnly 不适用。 不适用。 其中IsValueCreated属性是个Boolean类型,我们可以通过此属性去确定当前对象有没有被初始化 调用后,进行了创建操作 再说说Lazy中几个构造函数, public Lazy (bool isThreadSafe):isThreadSafe 的布尔参数,该方法参数用于指定是否从多线程访问 Value 属性。 如果想要仅从一个线程访问属性,则传入 false 以获取适度的性能优势。 如果想要从多线程访问属性,则传入 true 以指示 Lazy 实例正确处理争用条件(初始化时一个线程引发异常)。 public Lazy (LazyThreadSafetyMode mode):提供线程安全模式。 public Lazy (Func valueFactory): 表达式传递给新的 Lazy 对象的构造函数。 下一次访问 Value 属性将导致新 Lazy 的初始化,并且其 Value 属性此后会返回已分配给该属性的新值。 总结 参考:https://docs.microsoft.com/en-us/dotnet/framework/performance/lazy-initialization

优秀的个人博客,低调大师

C#隐藏方法

不能删除基类的任何成员,但可以用与基类成员相同的成员来屏蔽基类成员 屏蔽数据成员:派生类中声明名称和类型相同的成员 屏蔽函数成员:在派生类中声明新的带有函数签名的成员 让编译器知道:添加new关键字,否则会警告 pet------------------------------------petpublic sting name;---------------------public string name;public void PrintName();---------------public void PrintName(); -----------------------------------------------------------Dog---------------------------------------new public void PrintName();

优秀的个人博客,低调大师

C#读写Excel

读 Range ce=sheet.Cells[2,3]; string vv=ce.value; 写 //注意: // * Excel中形如Cells[x][y]的写法,前面的数字是RowIndex,后面的数字是ColumnIndex! // * Excel中的行、列都是从1开始的,而不是0 //1.制作一个新的Excel文档实例 Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();//创建excel Workbook myWorkBook = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);//创建工作簿(workBook;即excel文件主体本身) //Worksheet sheet = (Worksheet)workBook.Worksheets[1];//创建主工作簿 //增加查询信息Sheet // Microsoft.Office.Interop.Excel.Worksheet sarchInfoSheet = myWorkBook.Sheets.Add(); sarchInfoSheet.Name = "查询条件";//确定sheet名称 sarchInfoSheet.Cells[1, 1] = "起始时间:";//起始时间 sarchInfoSheet.Cells[1, 2] = SearchPageModel.mySearchPageModel.startDateTime.ToString();//起始时间 sarchInfoSheet.Cells[2, 1] = "结束时间:";//结束时间 sarchInfoSheet.Cells[2, 2] = SearchPageModel.mySearchPageModel.endDateTime.ToString();//结束时间 sarchInfoSheet.Cells[3, 1] = "手机型号:"; sarchInfoSheet.Cells[3, 2] = SearchPageModel.mySearchPageModel.selectedModel; sarchInfoSheet.Cells[4, 1] = "测试计划:"; sarchInfoSheet.Cells[4, 2] = SearchPageModel.mySearchPageModel.selectedFile; sarchInfoSheet.Cells[5, 1] = "失败项目:"; sarchInfoSheet.Cells[5, 2] = SearchPageModel.mySearchPageModel.selectedItem; sarchInfoSheet.Cells[6, 1] = "失败原因:"; sarchInfoSheet.Cells[6, 2] = SearchPageModel.mySearchPageModel.selectedReason; sarchInfoSheet.Cells[7, 1] = "PhoneID:"; sarchInfoSheet.Cells[7, 2] = SearchPageModel.mySearchPageModel.phoneID; sarchInfoSheet.Cells[8, 1] = "工位IP:"; sarchInfoSheet.Cells[8, 2] = SearchPageModel.mySearchPageModel.computerIP; sarchInfoSheet.Cells[9, 1] = "计算机名:"; sarchInfoSheet.Cells[9, 2] = SearchPageModel.mySearchPageModel.computerName; sarchInfoSheet.Cells[10, 1] = "线程号码:"; sarchInfoSheet.Cells[10, 2] = SearchPageModel.mySearchPageModel.threadNumber; sarchInfoSheet.Cells[11, 1] = "操作人员:"; sarchInfoSheet.Cells[11, 2] = SearchPageModel.mySearchPageModel.tsOperator; sarchInfoSheet.Cells[12, 1] = "测试类型:"; sarchInfoSheet.Cells[12, 2] = SearchPageModel.mySearchPageModel.testType; sarchInfoSheet.Cells[13, 1] = "软件版本:"; sarchInfoSheet.Cells[13, 2] = SearchPageModel.mySearchPageModel.softVersion; sarchInfoSheet.Cells[14, 1] = "测试OK:"; sarchInfoSheet.Cells[14, 2] = SearchPageModel.mySearchPageModel.testResultOK; sarchInfoSheet.Cells[15, 1] = "测试NG:"; sarchInfoSheet.Cells[15, 2] = SearchPageModel.mySearchPageModel.testResultNG; sarchInfoSheet.Cells[16, 1] = "Data is exported from HustAnalyser."; // Worksheet myWorkSheet = myWorkBook.Sheets.Add(); //2.设置Excel分页卡标题 myWorkSheet.Name = "详细数据";//确定sheet名称 //方法二:生成Excel中列头名称 for (int i = 0; i < dataSouce.Columns.Count; i++) { myWorkSheet.Cells[1, i + 1] = dataSouce.Columns[i].ColumnName;//输出DataGridView列头名 if (i>= addCollumNum && searchResults[i - addCollumNum].result == "FAIL") { Microsoft.Office.Interop.Excel.Range columnRange = myWorkSheet.Columns.EntireColumn[i + 1]; columnRange.Font.Color = 0x0000FF;//(蓝00绿00红00) } } //RunInfo = "testDataArray复制数据到Excel"; //方法二:整体赋值 Microsoft.Office.Interop.Excel.Range dataSourceRange = myWorkSheet.Range[myWorkSheet.Cells[2, 1], myWorkSheet.Cells[dataSouce.Rows.Count + 1, dataSouce.Columns.Count]]; dataSourceRange.Value = testDataArray; //给Exccel中的Range整体赋值 //RunInfo = "Excel格式设置..."; dataSourceRange.EntireColumn.AutoFit(); //设定Excel列宽度自适应 //5.设置格式 Microsoft.Office.Interop.Excel.Range rowRange = myWorkSheet.Rows.EntireRow[1];//首行 rowRange.Font.ColorIndex = ColorIndex.深蓝;//首行颜色 rowRange.Interior.Color = 0xA6AA00;//(蓝A6绿AA红00) 首行背景 rowRange.Font.Bold = true;//首行加粗 Microsoft.Office.Interop.Excel.Range colRange = myWorkSheet.Columns.EntireColumn[1];//首列 //colRange.Font.ColorIndex = ColorIndex.深蓝;//首列颜色 colRange.Font.Bold = true;//首列加粗 //冻结首行首列 excelApp.ActiveWindow.SplitRow = 1;//设置将指定窗口拆分成窗格处的行号(拆分线以上的行数) excelApp.ActiveWindow.SplitColumn = 1;//设置将指定窗口拆分成窗格处的列号(拆分线左侧的列数) excelApp.ActiveWindow.FreezePanes = true;//冻结首行首列 //边框实线 Microsoft.Office.Interop.Excel.Range dataRange = myWorkSheet.Range[myWorkSheet.Cells[1, 1], myWorkSheet.Cells[dataSouce.Rows.Count, dataSouce.Columns.Count]];// dataRange.Borders.LineStyle = 1;//设置边框为实线 //myWorkSheet.Cells.Borders.LineStyle = 1;//设置整个数据区边框为实线 //auto adjust column width (according to content)调整列宽 //Microsoft.Office.Interop.Excel.Range allColumn = myWorkSheet.Columns; //allColumn.AutoFit();//调整列宽 dispatcher.Invoke(new System.Action(() => { //以下为Excel保存过程----------------------------- string excelFile = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\HustAnalyser导出info" + DateTime.Now.ToString("-yyyyMMddHHmmss") + ".xlsx"; //默认桌面 System.Windows.Forms.SaveFileDialog saveFileDialog = new System.Windows.Forms.SaveFileDialog(); saveFileDialog.Filter = "Excel文件(*.xlsx)|*.xlsx"; saveFileDialog.FileName = "HustAnalyser导出info" + DateTime.Now.ToString("-yyyyMMddHHmmss"); if (saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { excelFile = saveFileDialog.FileName; } //myWorkBook.Save();//保存结果 myWorkBook.SaveAs(excelFile);//保存结果 excelApp.Quit(); excelApp = null; System.Diagnostics.Process.Start("Explorer", "/select," + excelFile); //Excel保存结束------------------------------------ }));

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册