小编Ada*_*son的帖子

继承自List(of T)类的问题

我想实现一个优先级队列类.当以更高的优先级添加项目时,它将被推送到队列的前面,而不是添加到队列的末尾.

简单的几行代码

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)

.net vb.net inheritance list

5
推荐指数
2
解决办法
6016
查看次数

确定线程的来源

我在开发的一个小应用程序中遇到了高度的闪烁和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中,所以看起来它显然是一个运行时程序集.我还不确定为什么

  • 这是最高优先级
  • 它似乎在我的应用程序中造成打嗝

.net c# debugging multithreading

5
推荐指数
1
解决办法
1050
查看次数

从"开始菜单"链接单击"开始时间"

我使用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)

c# windows deployment clickonce winforms

5
推荐指数
1
解决办法
484
查看次数

在紧凑和完整的.net框架之间切换编译?

有谁知道如何在visual studio上切换库项目的编译,所以我可以编译为紧凑的框架和完整的.Net框架?

.net c# compact-framework visual-studio-2008 visual-studio

5
推荐指数
1
解决办法
1138
查看次数

为什么有些.NET Framework类不能使用泛型呢?

例:

System.Web.Security.MembershipCollection实现IEnumerable而不是IEnumberable<T>.为什么它不会实现后者,当它看起来会更好(例如使用LINQ)?

或者,它不一定更好吗?

.net generics ienumerable

5
推荐指数
2
解决办法
240
查看次数

在WCF中创建有状态客户端 - 服务器体系结构

我目前正处于规划阶段,对我们的一个核心(商业)软件产品进行了相当全面的重写,我正在寻找一些建议.

我们当前的软件是一个用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驱动程序不存在,对于某些平台而言).

现在,我看到他们的选择是:

  • 编写一个完全自定义的服务,使用TCP套接字并从头开始编写所有内容(身份验证,会话管理,序列化等).这是我最了解的,但我的假设是有更好的东西.
  • 使用WCF服务进行传输,自己负责身份验证和/或会话管理,或使用类似持久服务的会话管理

我的基本问题是:

什么是最合适的整体架构选择,以及ASP.NET身份验证或持久服务等特定功能,为WPF,ASP.NET,iOS和Android客户端提供有状态的持久服务?

c# asp.net wcf android ios

5
推荐指数
1
解决办法
2505
查看次数

如果不进行转换,则SQL DateTime转换失败

我正在修改客户端的现有查询,我遇到了一个令人困惑的问题.

我们的客户端使用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)

t-sql sql-server-2008-r2

5
推荐指数
1
解决办法
3343
查看次数

无法从引用的项目中合并ResourceDictionary

我有两个程序集,每个程序集都提供了一组我希望包含在我的应用程序中的通用样式和资源.我正在使用合并的词典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)

这显然缺乏有用的信息.同样,它们在运行时加载正如您所期望的那样,但在设计时没有任何资源可用.

wpf xaml resourcedictionary

5
推荐指数
1
解决办法
3278
查看次数

如何读取数据库中的byte []并将其转换为图像?

我有一个存储过程,返回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

c# image bytearray

4
推荐指数
1
解决办法
2万
查看次数

使用ChannelFactory <T>创建具有不同凭据的频道

我使用该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每个用户名的实例?

.net wcf channelfactory

3
推荐指数
1
解决办法
3654
查看次数