Tag: c#

获取目录大小的更有效方法

我已经构建了一个递归函数来获取文件夹路径的目录大小。 它的工作原理,但随着我必须搜索的目录数量不断增加(以及每个相应文件夹中的文件数量),这是一种非常缓慢,低效的方法。 static string GetDirectorySize(string parentDir) { long totalFileSize = 0; string[] dirFiles = Directory.GetFiles(parentDir, “*.*”, System.IO.SearchOption.AllDirectories); foreach (string fileName in dirFiles) { // Use FileInfo to get length of each file. FileInfo info = new FileInfo(fileName); totalFileSize = totalFileSize + info.Length; } return String.Format(new FileSizeFormatProvider(), “{0:fs}”, totalFileSize); } 这是在所有子目录中搜索参数路径,因此dirFiles数组变得非常大。 有没有更好的方法来实现这一目标? 我已经四处寻找,但还没有找到任何东西。 我想到的另一个想法是将结果放入缓存中,当再次调用该函数时,尝试查找差异并仅重新搜索已更改的文件夹。 不确定这是不是一件好事……

Visual Studio Intellisense的评论来自哪里?

Visual Studio项目可以选择创建XML文档文件 。 我知道,如果您想运行Sandcastle或NDoc等程序或创建MSDN样式API文档,XML文档文件会非常有用。 精细。 我不在乎。 根据此链接: http : //msdn.microsoft.com/en-us/library/s0we08bk.aspx 将/ doc开关添加到Visual Basic,C#或C ++编译器命令行时,会生成一个.xml文件,作为IntelliSense文档的基础。 因此,我认为Intellisense注释可以从这些生成的XML文件中显示出来。 但我创建了一个小测试应用程序,我在一个完全不同的项目中调用一个方法,XML注释出现在我的Intellisense中 – 我甚至没有保存MediaHelper类! 所以在这种情况下,显然没有Intellisense使用的.xml文件。 鉴于这一切,Intellisense从哪里获得它的垃圾? 谢谢!

找到.NET库的正确组合根

我在这里看到了关于这个论点的各种其他问题,最值得注意的是 dependency injection(DI)“友好”库 Ioc / DI – 为什么我必须在输入应用程序中引用所有层/组件? 和这篇文章 (和其他各种材料)。 但是,我不清楚将组合根放在库(DLL).NET项目中的哪个位置。 该项目不属于本文中提到的任何特定类型。 在桌面,控制台甚至Web应用程序中,这一点都是明确定义的。 我目前的方法是包装容器,注册类型并重新公开Resolve方法: class DefaultBootstrapper : IBootstrapper { public Bootstrapper() { _container = new XXXContainer(); RegisterTypes(_container); } public T Resolve() where T : class { return _container.Resolve(); } // + other _container.Resolve() overloads private readonly XXXContainer _container; } 然后我阻止库消费者创建库的根实例 (例如,定义内部构造函数),从而强制使用单例工厂: class XYZFactory { static […]

SpVoice和SpeechSynthesizer有什么区别

使用语音API或SAPI在C#中这两种方法有什么区别? using SpeechLib; SpVoice speech = new SpVoice(); speech.Speak(text, SpeechVoiceSpeakFlags.SVSFlagsAsync); 返回Apacela的声音 ,和 SpeechSynthesizer ss = new SpeechSynthesizer(); ss.SpeakAsync (“Hello, world”); 不适用于Apacela的声音 。 第一个声音返回所有声音但第二个声音只返回少量声音。 这是与SAPI 5.1和SAPI 5.3相关的吗? 在Vista和XP上的行为是相同的,在SpVoice能够检测到Apacela语音但是使用SpeechSynthesizer时,在XP和Vista上都没有检测到声音。 我猜XP使用SAPI 5.1,而Vista使用SAPI 5.3然后为什么在所有操作系统上都有相同的行为,但是与API的行为不同? 另外哪个API更强大,两种方式/ API之间有什么区别?

如何让webDriver等待页面加载(C#Selenium项目)

我在C#开始了一个Selenium项目。 尝试等待页面完成加载,然后才进行下一步操作。 我的代码如下所示: loginPage.GoToLoginPage(); loginPage.LoginAs(TestCase.Username, TestCase.Password); loginPage.SelectRole(TestCase.Orgunit); loginPage.AcceptRole(); 在loginPage.SelectRole(TestCase.Orgunit)中: RoleHierachyLabel = CommonsBasePage.Driver.FindElement(By.XPath(“//span[contains(text(), ” + role + “)]”)); RoleHierachyLabel.Click(); RoleLoginButton.Click(); 我搜索元素RoleHierachyLabel。 我一直在尝试使用多种方式等待页面加载或搜索允许一些超时的元素属性: 1. _browserInstance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); 2. public static bool WaitUntilElementIsPresent(RemoteWebDriver driver, By by, int timeout = 5) { for (var i = 0; i < timeout; i++) { if (driver.ElementExists(by)) return true; } return false; } 你会如何解决这个障碍?

linq子串?

我收集了一些单词,我想从这个限量为5个字符的集合创建集合 输入: Car Collection Limited stackoverflow 输出: car colle limit stack word.Substring(0,5)抛出exception(长度) 单词.Take(10)也不是好主意 有什么好主意吗?

使用DateTime.TryParse方法检查有效日期

我正在使用Datetime.TryParse方法来检查有效的日期时间。 输入日期字符串将是任何字符串数据。 但是返回false作为指定日期无效。 DateTime fromDateValue; if (DateTime.TryParse(“15/07/2012”, out fromDateValue)) { //do for valid date } else { //do for in-valid date } 编辑:我错过了。 我需要将有效日期和时间一起检查为“15/07/2012 12:00:00”。 欢迎任何建议……

如何使用具有该属性名称的字符串变量访问对象属性?

我如何在C#中执行此操作? using System; namespace TestProperties28373 { class Program { static void Main(string[] args) { Customer customer = new Customer { FirstName = “Jim”, LastName = “Smith”, Age = 34}; Console.WriteLine(customer.FirstName); string propertyName = “FirstName”; Console.WriteLine(customer.&&propertyName); //PSEUDO-CODE Console.ReadLine(); } } class Customer { public string FirstName { get; set; } public string LastName { get; set; […]

Silverlight + MVVM + Bindings =内存泄漏?

到目前为止,我的测试表明,在Silverlight中利用MVVM模式的所有标准方法,示例和框架都存在一个巨大的问题:大量内存泄漏会阻止VM被垃圾回收。 显然这是一个巨大而荒谬的主张 – 所以我的期望是有人会明白我为什么以及在哪里出错:) 重现的步骤很简单: 通过将视图datacontext设置为VM,将viewmodel绑定到视图(假设viewmodel利用INotifyPropertyChanged来支持数据绑定) 将UI元素绑定到viewmodel上的属性,例如: 以某种方式利用绑定(例如 – 只需键入文本框)。 这将创建一个从根,BindingExpression扩展到viewmodel的引用链。 然后,您可以从UI树中删除View以及所有对VM的引用 – 但是由于root BindingExpression VM引用链,VM永远不会被垃圾回收。 我创建了两个说明问题的例子。 它们有一个按钮来创建一个新的视图/视图模型(它应该转储对旧视图的所有引用)和一个强制垃圾收集并报告当前内存使用情况的按钮。 示例1是超级剥离的校准微型示例。 示例2不使用框架,只是以我能想到的最简单的方式说明问题。 例1 例2 对于那些可能想要帮助但又不想下载示例项目的人,这里是代码2的代码。我们从一个名为FooViewModel的viewmodel开始: public class FooViewModel : INotifyPropertyChanged { string _fooText; public string FooText { get { return _fooText; } set { _fooText = value; NotifyPropertyChanged(“FooText”); } } private byte[] _data; public FooViewModel() { _data […]

没有XmlInclude的序列化

我正在使用.NET序列化反序列化一个名为Method的类。 Method包含实现IAction的对象列表。 我最初使用[XmlInclude]属性来指定实现IAction所有类。 但是现在,我想改变我的程序来加载目录中的所有dll并删除实现IAction的类。 然后,用户可以反序列化包含实现IAction的操作的文件。 我不再控制实现IAction的类,因此我不能使用[XmlInclude] 。 有没有办法在运行时设置此属性? 或者为实现类设置了类似的属性? public class Method { public List Actions = new List(); } public interface IAction { void DoExecute(); } public static Type[] LoadActionPlugins(string pluginDirectoryPath) { List pluginTypes = new List(); string[] filesInDirectory = Directory.GetFiles(pluginDirectoryPath, “*.dll”, SearchOption.TopDirectoryOnly); foreach (string pluginPath in filesInDirectory) { System.Reflection.Assembly actionPlugin = System.Reflection.Assembly.LoadFrom(pluginPath); Type[] […]