小编Dan*_*han的帖子

HttpContext.Current.Cache是​​否是线程安全的?

请检查以下代码:

objDDLTable = HttpContext.Current.Cache["TestSet"] as Hashtable;

if (objDDLTable == null)
{
   objDDLTable = new Hashtable();
   arrDDLItems = GetDropDownList("testDropDown");
   objDDLTable.Add("testDropDown", arrDDLItems);
   HttpContext.Current.Cache["TestSet"] = objDDLTable;
}
else if (objDDLTable != null && !objDDLTable.Contains("testDropDown"))
{
   arrDDLItems = GetDropDownList("testDropDown");
   objDDLTable.Add("testDropDown", arrDDLItems);
   HttpContext.Current.Cache["TestSet"] = objDDLTable;
}
else
{
   arrDDLItems = objDDLTable["testDropDown"] as DdlItem[];
}
Run Code Online (Sandbox Code Playgroud)

您可以推断,代码基本上是为网页上的下拉列表缓存一些值.

首先,它尝试从缓存中读取HashTable对象,然后检查从缓存中读取的HashTable对象中是否存在特定键.如果是,则读取值(项目数组),否则,它从源读取数组并在HashTable中添加新密钥,然后将其存储回缓存以供后续使用.

这在大多数情况下都可以正常工作,但是,我们偶尔会遇到以下错误:

System.ArgumentException: Item has already been added. 
Key in dictionary: 'testDropDown' Key being added: 'testDropDown' at 
System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add) at 
System.Collections.Hashtable.Add(Object key, Object value)
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,系统testDropDown …

.net c# caching

11
推荐指数
1
解决办法
6397
查看次数

NetworkStream.Read()和NetworkStream.BeginRead()之间的区别?

我需要读取NetworkStream哪个会随机发送数据,数据包的大小也会不断变化.我正在实现一个多线程应用程序,其中每个线程都有自己的流来读取.如果流上没有数据,应用程序应该一直等待数据到达.但是,如果服务器完成了发送数据并终止了会话,那么它应该退出.

最初我使用该Read方法从流中获取数据,但它用于阻塞线程并一直等待直到数据出现在流上.

MSDN上的文档建议,

如果没有可用于读取的数据,则Read方法返回0.如果远程主机关闭连接,并且已收到所有可用数据,则Read方法立即完成并返回零字节.

但在我的情况下,我从来没有得到Read返回0并优雅退出的方法.它只是无限期地等待.

在我的进一步调查中,我遇到了BeginRead监视流并在接收数据时异步调用回调方法.我也试图使用这种方法寻找各种实现,但是,我无法确定何时使用BeginRead是有益的而不是Read.

在我看来,它BeginRead具有异步调用的优势,它不会阻止当前线程.但是在我的应用程序中,我已经有了一个单独的线程来读取和处理来自流的数据,所以这对我来说没什么大不了的.

  • 任何人都可以帮我理解等待和退出机制, BeginRead它有什么不同Read

  • 实现所需功能的最佳方法是什么?

.net c# multithreading networkstream

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

如何动态更改主页上的aspnetForm的Action属性

我们正在尝试动态修改母版页中主ASP.NET表单的Action属性.

该页面有一个单选按钮,用户选择其中一个选项并点击提交,在回发时,根据选择应该设置表单的操作属性,并且应该自动再次提交表单.

我们试图使用JavaScript.

document.forms[0].action = "option1.aspx";
document.forms[0].submit();
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用,对action属性没有影响.

如果我们不使用母版页,可以通过使用轻松实现

this.Form.Action = "option1.aspx";
ClientScript.RegisterStartupScript(this.GetType(),"test1",
    "document.form[0].submit();",true);
Run Code Online (Sandbox Code Playgroud)

可悲的是,我们无法删除母版页..关于如何实现这一点的任何指示......?

javascript c# asp.net

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

是Queue.Synchronized比使用Lock()更快?

我有一个Queue,其中Enqueue操作将由一个线程执行,Dequeue将由另一个执行.不用说,我必须为它实现一些线程安全性.

我首先尝试在每个Enqueue/Dequeue之前使用队列上的锁,因为它可以更好地控制锁定机制.它运作良好,但我的好奇心使我进行了更多测试.

然后我尝试使用Queue.Synchronized包装器保持其他所有内容相同.现在,我不确定它是否真实,但这种方法的性能似乎有点快.

你觉得,两者之间的性能确实存在一些差异,或者我只是想象这里的东西......?:)

c# queue performance multithreading .net-3.5

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

YouTube API集成ASP.NET - 使用单页上传视频

我们正尝试使用Google YouTube API直接通过浏览器将视频从我们的网站上传到YouTube.

API分两步完成,第一步我们需要创建一个Video对象,其中包含标题,标签,描述,类别等所有元数据.然后我们需要将带有此对象的请求发送到YouTube并生成令牌对象作为回应.此令牌对象具有令牌值和令牌URL作为其成员.

在第二步中,他们建议我们应该创建一个Form,其action属性设置为Token URL.此表单应具有文件上载控件和隐藏字段,其中标记值为其值.发布此表单后,会将视频上传到YouTube.

如果我们将它作为一个两步过程,首先向用户询问元数据然后将它们重定向到第二页以进行实际的视频上传,这非常有用.但是,我们正在尝试在单个页面中完成此操作,向用户显示为一个步骤.

我们有一个MasterPage,其中指定了'aspnetForm',因此我们不能拥有另一个带有runat='server'属性的表单.

我们尝试使用JavaScript /代码隐藏来修改aspnetFrom的action属性,但无论我们做什么,它都保持不变.

在收到带有令牌的YouTube的第一个回复后,我们还尝试放置另一个嵌套表单,其操作标记将设置在按钮点击事件上.但即使这样也行不通,因为在调用此方法时不会创建表单.

我们已经尝试了几种方法,但似乎没有一种方法.任何有关这方面的建议都会很棒.

如果您有任何疑问需要清楚了解情况..请告诉我..


更新:

谢谢你们的回应.

我们稍微改变了业务逻辑以解决问题.它很久以前了,我现在还没有找到解决方案.

但是,问题仍然是开放的并得到回应.我非常感谢所有的帮助,因此,对于任何进一步的讨论都会留下问题.

c# asp.net youtube-api

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

ThreadPool.QueueUserWorkItem的意外行为

请检查下面的代码示例:

public class Sample
{
    public int counter { get; set; }
    public string ID;
    public void RunCount()
    {
        for (int i = 0; i < counter; i++)
        {
            Thread.Sleep(1000);

            Console.WriteLine(this.ID + " : " + i.ToString());
        }
    }
}

class Test
{
    static void Main()
    {
        Sample[] arrSample = new Sample[4];

        for (int i = 0; i < arrSample.Length; i++)
        {
            arrSample[i] = new Sample();
            arrSample[i].ID = "Sample-" + i.ToString();
            arrSample[i].counter = 10;
        }

        foreach (Sample s in arrSample) …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading asynchronous threadpool

6
推荐指数
1
解决办法
2554
查看次数

为什么在以下单例实现中"只读"必不可少?

public sealed class Singleton
{
    static readonly Singleton instance=new Singleton();

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Singleton()
    {
    }

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为即使readonlyinstance成员实例中删除关键字,单例仍然可以正常工作.

  • 它的静态,只存在一个实例.
  • 价值不能改变,因为它没有设定者.
  • 它是一个密封的类,不能被分类.

请帮我纠正我对这里概念的理解.

.net c# singleton readonly

6
推荐指数
2
解决办法
2307
查看次数

当Request对象中包含所有字段值时,为什么需要ViewState?

每当我们提交表单时,所有字段值都会发布到服务器并在Request对象中可用.理想情况下,可以使用相同的对象来读取值并使用它执行任何操作.

那么,为什么我们需要ViewState来保存字段的值?

请原谅我的无知,我想我错过了一些非常明显的事情,但是无法弄清楚是什么.

c# asp.net viewstate request

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