我想实现一个优先级队列类.当以更高的优先级添加项目时,它将被推送到队列的前面,而不是添加到队列的末尾.
简单的几行代码
Public Class PriorityQueue(Of T)
Inherits List(Of T)
Private _list As New List(Of T)
Public Sub Enque(ByVal item As T, Optional ByVal pushToFront As Boolean = False)
If pushToFront = True Then
_list.Insert(0, item)
Else
_list.Add(item)
End If
End Sub
Public Function Deque() As T
If _list.Count <> 0 Then
Dim item As T = _list(0)
_list.RemoveAt(0)
Return item
Else
Throw New InvalidOperationException
End If
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
现在调用函数试图找到队列中的元素....
dim _q as new PriorityQueue(Of integer)
_q.Enque(1)
_q.Enque(2)
msgbox(_q.Count()) …Run Code Online (Sandbox Code Playgroud) 我在开发的一个小应用程序中遇到了高度的闪烁和UI滞后,以测试我为我们的某个应用程序编写的组件.因为在空闲时间(当应该 - 严重 - 没有任何事情发生)时发生闪烁和滞后,我决定做一些调查.我注意到Threads窗口中有一些我不知道的线程(并非完全出乎意料),但引起我注意的是其中一个线程设置为Highest优先级.Main()即使在我的任何代码执行之前,也会调用此线程.我发现这个线程似乎出现在我编写的每个.NET应用程序中,甚至是控制台应用程序中.
作为我的大胆灵魂,我决定冻结线程,看看发生了什么.闪烁确实停止了,但在进行数据库交互时我遇到了一些奇怪的问题(我使用的是SQL CE 3.5 SP1).我的想法是,这可能是数据库实际运行的线程,但考虑到它是在应用程序加载时(在对数据库的任何引用之前)启动并且存在于其他非数据库应用程序中,我倾向于相信事实并非如此.
因为这个线程(像其他几个)在Location列中没有数据而且在暂停时我在调试器中切换到它时没有列出Call Stack,我尝试通过GetCurrentProcess()匹配StartAddress属性.相应线程的线程,但它超出了所有当前加载的模块地址范围.
有谁知道这个线程是什么,或者我怎么知道?
编辑
在进行一些挖掘之后,看起来StartAddress位于kernel32.dll中(基于附近的内存内容).这使我认为这只是用于启动线程的标准系统函数,根据这个页面,这基本上使我回到正方形,直到确定这个线程实际来自哪里.这一事实进一步证实了这个列表中的所有线程都具有相同的StartAddress值,这使我准确地询问目的是什么......?
编辑2
Process Explorer让我得到一个实际有意义的起始地址.它看起来像是mscorwks.dll!CreateApplicationContext+0xbbef.这个DLL在%WINDOWS%\ Microsoft.NET\Framework\v2.0.50中,所以看起来它显然是一个运行时程序集.我还不确定为什么
我使用clickonce 3.5部署了大应用程序(在600个文件中190 MB).安装此应用程序后,我从位于"开始"菜单中的链接运行它,但显示我的启动画面需要4-12秒.从.exe文件运行此应用程序时,1秒后可以看到启动画面.我的应用程序不使用自动更新(Clickonce更新是从源代码手动完成的)
我尝试使用dotTrace来分析这个应用程序,以找出在启动过程中需要这么长时间的内容并找出答案
IActContext System.Deployment.Internal.Isolation.IsolationInterop.CreateActContext(IDefinitionAppId)
Run Code Online (Sandbox Code Playgroud)
花了很多时间
这是完整的子树:
36,71% SetDomainManager - 12972 ms - 0 calls - System.AppDomain.SetDomainManager(Evidence, Evidence, IntPtr, Boolean)
18,52% CreateActivationContext - 6542 ms - 0 calls - System.Deployment.Internal.Isolation.Manifest.CmsUtils.CreateActivationContext(String, String [], Boolean, ApplicationIdentity &, ActivationContext &)
18,52% ActivationContext..ctor - 6542 ms - 0 calls - System.ActivationContext..ctor(ApplicationIdentity)
18,52% CreateFromName - 6542 ms - 0 calls - System.ActivationContext.CreateFromName(ApplicationIdentity)
18,52% CreateActContext - 6542 ms - 0 calls - System.Deployment.Internal.Isolation.IsolationInterop.CreateActContext(IDefinitionAppId)
18,19% SetupApplicationHelper - 6429 ms - 0 calls - System.AppDomain.SetupApplicationHelper(Evidence, Evidence, ApplicationIdentity, …Run Code Online (Sandbox Code Playgroud) 有谁知道如何在visual studio上切换库项目的编译,所以我可以编译为紧凑的框架和完整的.Net框架?
例:
System.Web.Security.MembershipCollection实现IEnumerable而不是IEnumberable<T>.为什么它不会实现后者,当它看起来会更好(例如使用LINQ)?
或者,它不一定更好吗?
我目前正处于规划阶段,对我们的一个核心(商业)软件产品进行了相当全面的重写,我正在寻找一些建议.
我们当前的软件是一个用Winforms编写的业务管理包(最初在.NET 2.0中,但到目前为止已转换为4.0),它直接与SQL Server后端通信.还有一个非常简单的ASP.NET Webforms网站,为旅途中的用户提供一些基本功能.我们的每个客户都必须向全世界公开这个网站(以及一些现有的ASMX网络服务)才能使用它,我们开始不再适应这种设置.
当我们重写这个软件包时,我们已经决定最好是从外部更容易访问软件包,并为我们的客户提供允许我们托管数据的选项(我们还没有决定提供商)而不是要求它们在本地托管SQL Server,SQL Server Reporting Services和IIS.
目前,我们的计划是使用WPF重写现有的Winforms应用程序,并通过Web提供更丰富的客户端体验.然而,展望未来,我们的客户表示有兴趣使用平板电脑,因此我们还需要支持iOS和Android原生应用程序作为客户端.
我们希望提供非现场托管(无需使用VPN架构)以及支持.NET生态系统之外的平台上的客户端,这使我们得出结论:我们所有的客户端 - 服务器通信都应该发生通过我们自己的服务,而不是使用SQL Server客户端(因为我们不希望将它暴露给世界,并且据我所知,SQL Server驱动程序不存在,对于某些平台而言).
现在,我看到他们的选择是:
我的基本问题是:
我正在修改客户端的现有查询,我遇到了一个令人困惑的问题.
我们的客户端使用SQL Server 2008 R2,并且相关数据库使用户能够通过使用EAV结构为其中一个表指定自定义字段.存储在此结构中的所有值都是varchar(255),并且几个字段用于存储日期.正在修改有问题的查询以使用其中两个字段并将它们(一个是开始,另一个是结束)与当前日期进行比较,以确定哪一行是"当前".
我遇到的问题是查询的一部分是CONVERT(DateTime, eav.Value)为了varchar变成一个DateTime.转换本身都已成功,我可以将值作为SELECT子句的一部分包含在内,但问题的一部分是给我一个转换错误:
Conversion failed when converting date and/or time from character string.
Run Code Online (Sandbox Code Playgroud)
真正的踢球者是这样的:如果我将此查询的基础(获取具有两个自定义字段值的实体列表展平为单行)定义为视图并选择视图并过滤视图getdate(),则它可以正常工作,但是如果我使用视图中的一个(非日期)字段向第二个表添加连接,则会失败.我意识到这可能有点难以理解,所以如果需要我可以发布一个示例查询,但这个问题已经有点长了.
我已经尝试在另一个数据库中重新创建基本结构并包含示例数据,但新数据库的行为与预期一致,所以我在这里不知所措.
编辑如果它有用,这里是视图的声明:
create view Festival as
select
e.EntityId as FestivalId,
e.LookupAs as FestivalName,
convert(Date, nvs.Value) as ActivityStart,
convert(Date, nve.Value) as ActivityEnd
from tblEntity e
left join CustomControl ccs on ccs.ShortName = 'Activity Start Date'
left join CustomControl cce on cce.ShortName = 'Activity End Date'
left join tblEntityNameValue nvs on …Run Code Online (Sandbox Code Playgroud) 我有两个程序集,每个程序集都提供了一组我希望包含在我的应用程序中的通用样式和资源.我正在使用合并的词典App.xaml来加载它们,并且在运行时它们很好.不幸的是,这些资源不会在设计时加载,在我的错误窗口中填充有关无法解析的资源的消息,并给我一个不代表实际显示内容的UI.
这是我现在的App.xaml:
<Application x:Class="ClientDebug.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Dai.Common;component/Xaml/Common.xaml" />
<ResourceDictionary Source="/Dai.DevExpress;component/Xaml/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)
对于这两个合并的词典,我在"错误"窗口中收到以下错误:
Error 11 An error occurred while finding the resource dictionary "/Dai.Common;component/Xaml/Common.xaml". C:\DevProjects\Core Application\ClientDebug\App.xaml 12 17 ClientDebug
Error 12 An error occurred while finding the resource dictionary "/Dai.DevExpress;component/Xaml/Styles.xaml". C:\DevProjects\Core Application\ClientDebug\App.xaml 13 17 ClientDebug
Run Code Online (Sandbox Code Playgroud)
这显然缺乏有用的信息.同样,它们在运行时加载正如您所期望的那样,但在设计时没有任何资源可用.
我有一个存储过程,返回varbinary(max)类型数据.我想将该数据转换为图像.
但是这行有问题:
public Image CargarAvatar(string login)
{
System.Object[] Args = new System.Object[1];
Args[0] = login;
DataTable X = new DataTable();
X = TraerDataTable("sp_CargarAvatarUsuario", Args);
byte[] ImagemByte = Convert.to (X.Rows[0][0].ToString());
MemoryStream ms = new MemoryStream();
Image returnImage = Image.FromStream(ms);
return returnImage;
}
Run Code Online (Sandbox Code Playgroud)
请帮忙!:d
我使用该ChannelFactory<T>类型在WsHttpBindingWCF Web服务中创建通道,该服务使用用户名/密码组合进行身份验证.虽然我使用自定义验证器进行身份验证,但我在创建具有不同凭据的频道时遇到了困难.
鉴于创建的开销ChannelFactory<T>,我正在尝试缓存它的单个实例并共享它,以便在我的应用程序的生命周期内创建多个通道.不幸的是,似乎凭证直接与工厂绑定,并且在创建通道后无法更改.
换句话说,如果我试试这个:
factory.Credentials.UserName.UserName = "Bob";
factory.Credentials.UserName.Password = "password";
var channel1 = factory.CreateChannel();
factory.Credentials.UserName.UserName = "Alice"; // exception here
factory.Credentials.UserName.Password = "password";
var channel1 = factory.CreateChannel();
Run Code Online (Sandbox Code Playgroud)
我得到一个例外,告诉我该UserName属性现在是只读的.
是否有可能在这里实现任何类型的缓存,或者我基本上必须缓存ChannelFactory每个用户名的实例?