小编Ang*_*ker的帖子

如何加快将DataTable转储到Excel工作表?

我有以下例程将DataTable转储到Excel工作表中.

    private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet xlWk, 
                                    string [] columnNames, string [] fieldNames)
    {
        // render the column names (e.g. headers)
        for (int i = 0; i < columnNames.Length; i++)
            xlWk.Cells[1, i + 1] = columnNames[i];

        // render the data 
        for (int i = 0; i < fieldNames.Length; i++)
        {
            for (int j = 0; j < dt.Rows.Count; j++)
            {
                xlWk.Cells[j + 2, i + 1] = dt.Rows[j][fieldNames[i]].ToString();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

无论出于何种原因,在我相对现代的PC上倾销25列和400行的DataTable大约需要10-15秒.占用更长的测试人员的机器.

我有什么办法可以加快这段代码的速度吗?或者互操作本身就很慢?

解决方案:根据Helen Toomik的建议,我修改了方法,它现在应该适用于几种常见的数据类型(int32,double,datetime,string).随意扩展它.处理我的数据集的速度从15秒变为1秒.

    private void RenderDataTableOnXlSheet(DataTable dt, Excel.Worksheet …
Run Code Online (Sandbox Code Playgroud)

c# excel performance interop .net-2.0

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

如何用4个LED告诉IP地址?

我正在使用.NET Micro Framework开发一个网络管理设备.由于想法是在办公室中拥有一堆设备,因此有时用户必须知道特定设备的IP地址.

所以我一直试图提出如何指出用户的IP地址的想法.唯一的用户界面是4个LED灯,我可以以不同的速度闪烁.

到目前为止,我能想到的最好的想法是:看看IP地址有4个部分,我有4个LED,每个LED负责单个IP地址部分是有意义的.所以对于像192.168.0.34这样的地址,我会让LED1闪烁一次,然后暂停,然后闪烁9次,暂停,然后闪烁2次.然后该动作将转移到LED2,LED2将以类似的方式闪烁168,依此类推.数字0将通过快速闪烁半秒钟来指示.

还有其他想法吗?

hardware ip-address .net-micro-framework

14
推荐指数
4
解决办法
1038
查看次数

我应该在哪里存储应用程序特定设置

我被要求更新过去6年一直在WinXP上运行的VB6应用程序.客户端想要使用Windows 7.到目前为止,应用程序将其设置存储在位于应用程序目录中的INI文件中.XP和7之间的一个关键区别是你不能再写C:\Program Files\AppFolder了.

我试图找出文件系统应该存储设置的位置?鉴于应用程序仍然需要在WinXP上运行,我有点困惑.

在WinXP上,我有以下内容:

C:\Documents and Settings\profilename\Application Data
C:\Documents and Settings\profilename\Local Settings\Application Data
Run Code Online (Sandbox Code Playgroud)

在Windows 7上,我有以下内容:

C:\Users\profilename\AppData\Local
C:\Users\profilename\AppData\LocalLow
C:\Users\profilename\AppData\Roaming
Run Code Online (Sandbox Code Playgroud)

这些文件夹中的每一个都有子文件夹,似乎存储各种产品的设置/文件

那2个问题:

  1. 鉴于所有这些文件夹,我在哪里存储我的设置?
  2. 我假设有一个漂亮的Windows API调用,它会给我这个文件夹的正确位置.我希望它适用于XP和7.我的假设是否正确?如果是这样,将非常感谢链接.

vb6 settings windows-xp windows-7

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

如何识别插入USB插槽的设备?

我想检测用户何时插入或移除USB声卡.当这种情况发生时,我已经成功地抓住了这个事件,但是我不知道插入了什么.

我尝试了一个基于这个问题的方法:

string query =
    "SELECT * FROM __InstanceCreationEvent " +
    "WITHIN 2 "
  + "WHERE TargetInstance ISA 'Win32_PnPEntity'";
var watcher = new ManagementEventWatcher(query);
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcher.Start();
Run Code Online (Sandbox Code Playgroud)

当我通过EventArrived事件收到通知时,我不知道如何确定刚刚插入的设备的实际名称.我已经浏览了每个属性,无法用它做出正面或反面.

我也尝试了不同的查询:

var query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent where EventType = 1 or EventType = 2");
var watcher = new ManagementEventWatcher(query);
watcher.EventArrived += watcher_EventArrived;
watcher.Stopped += watcher_Stopped;
watcher.Query = query;
watcher.Start();
Run Code Online (Sandbox Code Playgroud)

但也无济于事.有没有办法找到插入或删除的设备的名称.

最重要的是,我想知道什么时候插入USB声卡或从系统中删除.它应该适用于Windows 7和Vista(虽然我只会满足于Win7).

编辑:根据获胜提交者的建议,我创建了一个包含所有功能的完整解决方案.

c# usb wmi plug-and-play

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

13
推荐指数
4
解决办法
8910
查看次数

查找列表中项目的最快方法?

我有一个未排序的字符串列表.我可以将这些项放在数组,List,SortedList等等.

我需要找到在此列表中查找字符串的最快方法.我最好将列表转储到数组中,对其进行排序,然后实现二进制搜索?或者框架是否提供了这样做的方法?

谢谢

PS使用VS2008对抗.NET 2.0

c# lookup search visual-studio-2008 .net-2.0

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

在VB6应用程序中丢失组件错误

我有一个VB6应用程序,有大量的第三方组件.该应用程序运行良好,但在退出时(并且仅当作为独立的EXE运行时,例如不在IDE中),它会弹出一条错误消息:

在此输入图像描述

我之前看到过这样的错误,但通常会说哪个组件缺少依赖项或未正确注册.

我通过Process Monitor运行它并获得了以下无法找到的文件:

在此输入图像描述

然后就退出了.我用谷歌搜索了它找不到的文件名,似乎找不到任何东西.它似乎在寻找MSComENU,MSComEN和MSCOENU dll的变种.

我检查并重新检查以确保所有第三方组件都存在且它们是 - 应用程序功能正常,如果不存在则不会.

值得注意的是,在VB6代码(Form_Unload事件)的最后一行被触发后发生错误.我知道这是因为最后一行是一个确实出现的消息框.

很多,后来编辑:我终于回到处理问题并通过消除过程找出它(这是一个loooong过程).最后它与任何MSCOMM*.dll条目无关.事实上,我不知道他们为什么还会出现在Process Monitor中.问题要简单得多.

我在主窗体上有几个第三方控件.为了不用大量事件处理代码污染主窗体,我将这些控件委托给一个新类,如下所示:

' declaration code in main form'
Private WithEvents moDelegateObject as clsDelegateObject

' still in the main form, after initialization'
Set moDelegateObject = new clsDelegateObject
With moDelegateObject
    Set .ThirdPartyCtlHandler1 = me.ThirdPartyCtl1
    Set .ThirdPartyCtlHandler2 = me.ThirdPartyCtl2
    Set .ThirdPartyCtlHandler3 = me.ThirdPartyCtl3
end with

' declarations and properties inside of clsDelegateObject'
Private WithEvents moThirdPartyCtlHandler1 as ThirdPartyCtl
Private WithEvents moThirdPartyCtlHandler2 as ThirdPartyCtl
Private WithEvents moThirdPartyCtlHandler3 as ThirdPartyCtl
Public Event …
Run Code Online (Sandbox Code Playgroud)

vb6 error-handling

13
推荐指数
1
解决办法
1222
查看次数

如何更新照片上的时间戳或在Google+照片上添加时区?

使用Picasa Web API我从我的Google+相册中检索照片并尝试更改时间戳(手机上的时间错误,因此尝试修复):

var service = new PicasaService("exampleCo-exampleApp-1");
service.setUserCredentials("uid", "pwd");
AlbumQuery query = new AlbumQuery(PicasaQuery.CreatePicasaUri("default"));

PicasaFeed feed = service.Query(query);
var entry = (PicasaEntry)feed.Entries.SingleOrDefault(f => f.Title.Text == "Trip to Italy - ALL");

var ac = new AlbumAccessor(entry);

var photoQuery = new PhotoQuery(PicasaQuery.CreatePicasaUri("default", ac.Id));
PicasaFeed photoFeed = service.Query(photoQuery);

PicasaEntry picasaEntry = photoFeed.Entries[0];

ulong timestamp = Convert.ToUInt64(picasaEntry.GetPhotoExtensionValue("timestamp"));

// deduct 9 hours
DateTime dt = FromUnixTime(pa.Timestamp).AddHours(-9);
picasaEntry.SetPhotoExtensionValue("timestamp", Convert.ToString(ToUnixTime(dt)));

var updatedEntry = (PicasaEntry) picasaEntry.Update();
Run Code Online (Sandbox Code Playgroud)

不幸的是,当.Update方法成功时,时间戳不会改变.我也试图改变照片的时区(例如,用户手动操作同样的事情,如http://i.imgur.com/pxYSi9S.png).

我错过了一些简单的事吗?还有另一种方法可以完成同样的事情吗?我也愿意改变照片的时区.

c# picasa photos google-plus

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

告诉浏览器不要缓存的正确方法是什么?

我有一个始终需要保持最新状态的网页.我不希望浏览器缓存它.为此,此元标记嵌入了页面:

<meta name="Expires" content="Tue, 01 Jun 1999 19:58:02 GMT"> 
Run Code Online (Sandbox Code Playgroud)

但是,有些浏览器似乎忽略了它.Chrome在这方面特别糟糕,尽管其他浏览器也倾向于做同样的事情.

当我从书签栏中选择页面时,大部分时间它甚至都没有命中服务器,只是从缓存中加载它.如果我然后按F5,它会转到服务器并获取新副本.

我错过了一些简单的事吗?我认为过期元标记是它的完成方式.

这发生在Windows 2000上的IIS 5.0上.


底线:看起来像HTML代码中的元标记几乎什么都不做.但是,在HTTP中设置expires标签可以很好地解决问题.

browser caching meta-tags

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

如何在NavigationBar上更改BarButtonItem的文本?

我正在尝试创建可以编辑的项目列表.像这样的东西:

在此输入图像描述

为此,我在视图顶部添加了一个NavigationBar,然后在XCode设计器中添加了2个Bar Button项.我将左侧按钮的标识符设置为"添加",右侧的按钮设置为"编辑".

当我单击编辑时,我想将文本更改为完成.我尝试了各种方法,例如btnEdit.Title = "Done",但它根本不需要.

我看过几篇推荐.SetTitle的博客文章,但是UIButtonBarItem没有这种方法(至少在MonoTouch中).

那么,如何更改"编辑"按钮的标题?

uinavigationbar xamarin.ios uibuttonbaritem ios

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