草庐IT

windows - 我是否需要编码 CreateStreamOnHGlobal 返回的 IStream,以便跨线程使用?

我有一个COM流对象(IStream),是用CreateStreamOnHGlobal创建的.我想在同一进程的不同线程中使用它。我是否需要编码流对象本身(使用CoMarshalInterface等)?或者它已经是线程安全的了?已编辑,读/写/查找与我的代码中的锁正确同步。 最佳答案 COM将IStream视为一种特殊类型的接口(interface),可以安全地跨线程使用。这是必要的,以便可以使用CoMarshalInterThreadInterfaceInStream在IStream中跨线程边界编码其他接口(interface)。.

c# - 我是否应该将 async/await 添加到单行函数中?

这个问题在这里已经有了答案:Whyuseasyncandreturnawait,whenyoucanreturnTaskdirectly?(8个答案)关闭5个月前。我是否应该将async/await添加到单行函数中,例如:publicasyncTaskGetFoo(){returnawaitHandleAsync(....);}或者如果参数不需要异步调用并且我可以简单地写,这是不需要的开销:publicTaskGetFoo(){returnHandleAsync(....);}

c# - 检测我是否点击了文本的特定部分

我正在使用Unity创建Android/IOS应用程序。在包含段落的页面中,我想知道是否单击了文本的最后一句。(例如“单击此处了解更多详细信息”)。单击这句话后我想打开一个新页面。我知道我可以放置2个文本元素并将这句话添加到第二个元素,然后重置到第一个元素并在第二个元素上添加onClick事件。这是解决问题的方法,但在我的情况下,它无法解决问题,因为我正在动态获取文本,并且它的大小会不时发生变化,因此第二个文本元素不会从同一开始第一个元素结束后的行。我需要一个用代码完成的解决方案。我看到了samequestion但它适用于HTML和JavaScript,不适用于Unity。我将发布答案

c# - 我怎么知道我是否即将遇到 OutOfMemoryException?

我有一个程序可以处理大量数据,并且可以缓存大部分数据以供内存中的后续记录重复使用。我缓存的越多,它的工作速度就越快。但是,如果我缓存太多,那么会很糟糕,重新开始,这需要更长的时间!异常发生后,我尝试做任何事情都不太成功-我无法获得足够的内存来做任何事情。我也试过分配一个巨大的对象,然后立即取消分配,但结果不一致。也许我做错了什么?无论如何,我所坚持的只是对缓存对象的数量设置一个硬编码限制,根据经验,这个限制似乎足够低。有更好的想法吗?谢谢。回答后编辑下面的代码似乎完全符合我的要求:LoopDimmemFailPointAsMemoryFailPoint=NothingTrymemFai

c# - 我是否应该使用与 .NET BCL 的名称冲突的(否则是最佳的)类名称?

这种情况对你们中的一些人来说可能并不少见:您有一些功能可以放在一个类中,但是该类的完美名称(*)被System中的一个类采用>不属于您但您正在使用/导入的namespace或其他namespace/类。(*)我所说的完美是指小巧、简洁和清晰的名称。例如,我有一个Utils类,它有一个Diagnostics(主要是debugutils)类和一个Drawing类。我可以:有一个DrawingUtils类和一个DiagnosticsUtils类,但这闻起来像是结构不好。选择一个同义词库,然后用一个更糟糕、更长或笨拙的名字来完成,这些名字仍然不经意地被使用。用我的母语而不是英语写类(class

c# - 我是否必须取消订阅局部变量的匿名事件处理程序?

如果我有一个看起来像这样的代码:publicvoidFoo(){Barbar=newBar();bar.SomeEvent+=(sender,e)=>{//Dosomethinghere};bar.DoSomeOtherThingAndRaiseSomeEvent();}当方法超出范围时,bar是否会被收集,或者我是否必须手动取消订阅该事件以防止由于对SomeEvent的引用而发生内存泄漏>? 最佳答案 你的情况很好;订阅者事件不会阻止收集发布者,但可能会发生相反的情况。例如,classFoo{publiceventEventHan

c# - CaSTLe Windsor - 我是否必须释放单例或非一次性 transient 对象?

Castlewiki在几个地方说我应该总是为通过容器解析的组件调用container.Release()。这对于复杂的生活方式管理技术(例如LifeStyle.Pooled)或使用专门设施时显然是有意义的......但我真的必须释放单例(它在容器被处理之前一直存在)和非一次性transient对象吗?如果我逐步执行对transient对象或单例的Release()调用,这些调用似乎多余的-例如在transient对象未实现IDisposable的情况下,内核只是注意到它没有跟踪对象并返回...似乎有一个“组件负担”的概念来跟踪对解析transient对象时可能构造的其他一次性组件的“间

c# - 我是否应该始终将我的代码包装在 try...catch block 中?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whentousetry/catchblocks?Mainmethodcodeentirelyinsidetry/catch:Isitbadpractice?WhentouseTryCatchblocks异常可能发生在任何地方,所以这让我思考:我是否应该始终将我的代码包装在try..catchblock中?这是针对C#的。(我可能遗漏了一些基本的东西,因为我还是个新手)编辑:看来这确实不是一个非常聪明的问题。我们在学校学到的唯一一件事就是使用try...catch来防止崩溃。对于异常,我们所做的是显示一个Me

c# - 我是否正确使用 IRepository?

我希望在一个小项目中使用IRepository模式(由NHibernate支持,如果它重要的话)。域是一个简单的域,有意让我专注于理解IRepository模式。单独的域类是Movie,具有Year、Genre和Title的属性。我的意图是“获取”其属性符合上述类型标准的电影。约定似乎是有一个通用的IRepository接口(interface),类似于下面:publicinterfaceIRepository{TGet(intid);T[]GetAll();voidAdd(Titem);voidUpdate(Titem);voidDelete(Titem);}使用基础实现:publi

c# - 我是在做错什么还是无法并行提取 zip 文件?

我创建这个是为了测试并行提取:publicstaticasyncTaskExtractToDirectoryAsync(thisFileInfofile,DirectoryInfofolder){ActionBlockblock=newActionBlock((entry)=>{varpath=Path.Combine(folder.FullName,entry.FullName);Directory.CreateDirectory(Path.GetDirectoryName(path));entry.ExtractToFile(path);},newExecutionDataflow