小编Bri*_*sen的帖子

如何实施弱参考?

我想知道弱引用是如何在内部工作的,例如在.NET或Java中.我的两个一般想法是:

  1. "侵入性" - 添加对最顶级类(对象类)的弱引用列表.然后,当一个对象被销毁时,可以迭代所有弱引用并将其设置为null.
  2. "非侵入式" - 维护对象指向弱引用列表的哈希表.当为对象B创建弱引用A时,将在哈希表中修改或创建一个条目,其键将是指向B的指针.
  3. "Dirty" - 为每个对象存储一个特殊的哈希值,当对象被销毁时,它将被归零.弱引用将复制该哈希值,并将其与对象的值进行比较,以检查对象是否处于活动状态.但是,当直接使用时,这会导致访问冲突错误,因此我需要有一个具有该哈希值的附加对象.

这些解决方案中的任何一个看起来既干净又效 有谁知道它是如何实际完成的?

.net java weak-references internals

17
推荐指数
4
解决办法
3272
查看次数

在Windows服务上设置恢复选项

我最近写了一个小类来帮助我更改Windows服务的恢复选项(我在网上找到的大部分代码).代码为第一次,第二次和后续故障创建FailureAction.每个Failure对象都包含一个类型(None,Restart,Reboot,RunCommand)和一个Delay(int),以毫秒为单位.这些对象打包在struct中,并传递给ChangeServiceConfig2(WinAPI P/Invoke).但是,当我实际右键单击控制台上的服务并转到"恢复"选项卡时,您只能为所有故障(第一个,第二个和后续故障)设置一次延迟("重新启动服务器后"字段).当我以编程方式设置它时,它从第一次FailureAction开始延迟并忽略所有其他的.有谁知道为什么会这样?为什么在只使用第一个对象时,我们必须传递所有FailureAction对象的延迟值?我误会了什么吗?

此外,设置dwResetPeriod /"重置失败计数后"似乎没有任何影响.

码:

public class ServiceConfigurator
{
    private const int SERVICE_ALL_ACCESS = 0xF01FF;
    private const int SC_MANAGER_ALL_ACCESS = 0xF003F;
    private const int SERVICE_CONFIG_DESCRIPTION = 0x1;
    private const int SERVICE_CONFIG_FAILURE_ACTIONS = 0x2;
    private const int SERVICE_NO_CHANGE = -1;
    private const int ERROR_ACCESS_DENIED = 5;

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    private struct SERVICE_FAILURE_ACTIONS
    {
        public int dwResetPeriod;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string lpRebootMsg;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string lpCommand;
        public int cActions;
        public IntPtr lpsaActions;
    }

    [DllImport("advapi32.dll", EntryPoint = "ChangeServiceConfig2")]
    private static extern bool ChangeServiceFailureActions(IntPtr …
Run Code Online (Sandbox Code Playgroud)

c# windows-services

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

获得视频的长度

我无法找到一个如何以编程方式获取文件视频长度的简单示例.很多人说,哦,使用这个库/包装或其他什么,但不说如何.我已经下载了ffmpeg,但不知道如何实际使用它,似乎没有任何关于如何使用它来获取视频持续时间的示例.我看到你如何使用它来转换视频,但我只是想知道视频的持续时间.所有其他信息都无关紧要.

有没有办法简单地做到这一点,无论是在C#,python,java等等,它只会返回一个表示视频文件长度的字符串.

如果可能,请提供示例.提前致谢!

假设标准文件格式,例如wmv,avi,mp4,mpeg.有元数据的东西.

c# video duration ffmpeg

14
推荐指数
3
解决办法
2万
查看次数

我可以在F#中提供Type作为Type提供者的输入吗?

是否有任何陷阱我应该注意这样做?

你知道我可能遇到的同一个pb的现有代码吗?

THKS

f# type-providers

14
推荐指数
1
解决办法
609
查看次数

数组中最大和最小的数字

这完美地工作...但是当我使用foreach而不是for这个不起作用.我无法理解for并且foreach是一样的.

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = new int[10];
            Console.WriteLine("enter the array elements to b sorted");
            for(int i=0;i<10;i++)
            {
                array[i] = Convert.ToInt32(Console.ReadLine());
            }
            int smallest = array[0];
            for(int i=0;i<10;i++)

            {
                if(array[i]<smallest)
                {
                    smallest=array[i];

                }
            }
            int largest = array[9];
            for(int i=0;i<10;i++)
            {

                if (array[i] > largest)
                {
                    largest = array[i];

                }
            }
            Console.WriteLine("the smallest no is {0}", smallest);
            Console.WriteLine("the largest no is {0}", largest); …
Run Code Online (Sandbox Code Playgroud)

c#

13
推荐指数
3
解决办法
14万
查看次数

用英语等价物替换德语字符(变音符号,重音符号)

用英语等价物替换德语字符(变音符号,重音符号)

我需要从各个文本字段中删除任何德语特定字符,以便处理到另一个不接受它们有效的系统.

所以我所知道的人物是:

ßäöüÄÖÜ

目前我有一种手动方式来替换它们:

myGermanString.Replace("ä","a").Replace("ö","o").Replace("ü","u").....
Run Code Online (Sandbox Code Playgroud)

但我希望有一种更简单/更有效的方法.因为我每次运行都会在数千个字符串上进行,其中99%不会包含这些字符.

也许是一种涉及某种CultureInfo的方法?

(例如,根据MS,以下返回的字符串是相等的

String.Compare("Straße", "Strasse", StringComparison.CurrentCulture);
Run Code Online (Sandbox Code Playgroud)

所以必须存在某种转换表?)

.net c# cultureinfo

13
推荐指数
3
解决办法
3万
查看次数

如何围绕F#中的浮动?

是否有一个函数可以在Fsharp中舍入浮点数?就像是

round(3.21156,3) = 3,212
Run Code Online (Sandbox Code Playgroud)

谢谢

f#

13
推荐指数
2
解决办法
6377
查看次数

如何在调试期间查找实现给定接口的所有类型实例

我正在寻找一种方法来定位实现给定接口的类型堆上的所有当前实例(在WinDbg调试期间).由于接口不是您可以创建接口实例的类型,因此在检查堆时显然不会显示它们.即!dumpheap在这里没什么帮助.

但是,!dumpmt -md在给定的MT上列出了IFacesin 的数量IFaceMap.据我所知,这个数字似乎表明该类型是否实现了一个或多个接口.当-md列出使用类型的标志方法时.

不幸的!dumpmd是,就我所知,它并没有将给定的方法绑定到接口,所以这不能用于建立已实现的接口.

我假设这些信息可以在内存中找到,但我不知道在哪里看.任何输入都非常感谢.

.net debugging windbg

12
推荐指数
1
解决办法
1339
查看次数

防止重复的MDI子表单

有没有办法阻止在MDI容器中打开某个表单,如果该表单已经打开?

c# mdi children

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

如何获得网络适配器索引?

从代码我想强制Windows机器使用特定的网络适配器进行到特定IP地址的所有连接.

我计划通过使用ROUTE ADD命令行工具来实现,但这要求我事先知道网络适配器的索引号(因为它必须提供给ROUTE ADD命令).

问题:如果我知道它的名字,我如何以编程方式检索网络适配器的索引?

我知道ROUTE PRINT向我显示了我需要的信息(所有网络适配器的索引号),但是必须有一种方法来以编程方式获取该信息(C#)?

请注意,我不喜欢解析ROUTE PRINT的文本输出,因为文本格式可能会随着不同的Windows版本而改变.

c# windows networking routing

12
推荐指数
1
解决办法
8463
查看次数